2014-05-25 5 views
0
대신 그것이 After Pandas Dataframe pd.concat I get NaNs 수평이 예의

을주고, I 수직려고 :팬더 dataframe의 CONCAT 불필요한 NA/NaN이 열

import pandas 
a=[['Date', 'letters', 'numbers', 'mixed'], ['1/2/2014', 'a', '6', 'z1'], ['1/2/2014', 'a', '3', 'z1'], ['1/3/2014', 'c', '1', 'x3']] 
df = pandas.DataFrame.from_records(a[1:],columns=a[0]) 

f=[] 
for i in range(0,len(df)): 
    f.append(df['Date'][i] + ' ' + df['letters'][i]) 

df['new']=f 

c=[x for x in range(0,5)] 
b=[] 
b += [['NA'] * (5 - len(b))] 
df_a = pandas.DataFrame.from_records(b,columns=c) 

df_b=pandas.concat([df,df_a], ignore_index=True) 

df_b 출력 동일한 df_b=pandas.concat([df,df_a], axis=0)

결과 :

 0 1 2 3 4  Date letters mixed   new numbers 
0 NaN NaN NaN NaN NaN 1/2/2014  a z1 1/2/2014 a  6 
1 NaN NaN NaN NaN NaN 1/2/2014  a z1 1/2/2014 a  3 
2 NaN NaN NaN NaN NaN 1/3/2014  c x3 1/3/2014 c  1 
0 NA NA NA NA NA  NaN  NaN NaN   NaN  NaN 

원하는 :

 Date letters numbers mixed   new 
0 1/2/2014  a  6 z1 1/2/2014 a 
1 1/2/2014  a  3 z1 1/2/2014 a 
2 1/3/2014  c  1 x3 1/3/2014 c 
0 NA    NA  NA NA NA 

답변

2

데이터 프레임 df_a을 올바른 열로 직접 작성합니다.

df_b = pandas.concat([df,df_a]).reset_index(drop=True) 

그것은

 Date letters numbers mixed   new 
0 1/2/2014  a  6 z1 1/2/2014 a 
1 1/2/2014  a  3 z1 1/2/2014 a 
2 1/3/2014  c  1 x3 1/3/2014 c 
3  NA  NA  NA NA   NA 
,369을 제공합니다 : 코드의 작은 리팩토링으로

, 그것은 그것은 결국

 Date letters numbers mixed   new 
0 1/2/2014  a  6 z1 1/2/2014 a 
1 1/2/2014  a  3 z1 1/2/2014 a 
2 1/3/2014  c  1 x3 1/3/2014 c 
0  NA  NA  NA NA   NA 

제공

import pandas 
a=[['Date', 'letters', 'numbers', 'mixed'], \ 
    ['1/2/2014', 'a', '6', 'z1'],\ 
    ['1/2/2014', 'a', '3', 'z1'],\ 
    ['1/3/2014', 'c', '1', 'x3']] 
df = pandas.DataFrame.from_records(a[1:],columns=a[0]) 
df['new'] = df['Date'] + ' ' + df['letters'] 

n = len(df.columns) 
b = [['NA'] * n] 
df_a = pandas.DataFrame.from_records(b,columns=df.columns) 
df_b = pandas.concat([df,df_a]) 

제공

+0

감사 귀하의 코드가 훨씬 더 – jason

1

당신이 최신 버전을 사용하는 경우, 이것은 당신이 원하는 당신을 제공

df.ix[len(df), :]='NA' 

편집 : 또는 당신이 CONCAT을 원한다면, 당신은 DF 열 등의 df_a, 사용 열을 정의

df_a = pandas.DataFrame.from_records(b,columns=df.columns) 
+0

와우. 그것은 달콤합니다. 답변 해주셔서 감사합니다. – jason

+1

또한'df [ 'new']'를 얻으면 더 쉬운 방법이 있습니다 :'df [ 'new'] = df [ 'Date'] + 'df ['letters ']' – Happy001

+0

. 매우 도움이됩니다. – jason