pandas dataframe 合并出现多余的 NA/NaN 列
在这个例子中,它是横向的,参考链接是 在使用Pandas的pd.concat后,我得到了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 个回答
1
如果你使用的是最新版本,这样做就能满足你的需求。
df.ix[len(df), :]='NA'
编辑:或者如果你想要连接(合并),在定义 df_a
时,可以把 df 的列作为列来使用。
df_a = pandas.DataFrame.from_records(b,columns=df.columns)
2
我会直接创建一个叫 df_a
的数据框,里面有正确的列。
稍微调整一下你的代码,就可以得到:
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])
结果是:
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
最后:
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