我对pandas还不太熟悉,正在尝试找出如何同时向pandas添加多个列。这里的任何帮助都是感激的。理想情况下,我想在一个步骤,而不是多个重复的步骤这样做
将熊猫作为pd导入
df={'col_1':[0,1,2,3],
“col_2”:[4,5,6,7]}
df=pd.DataFrame(df)
df['column_new_1','column_new_2','column_new_3']=[np.nan,'dogs',3]#认为这在这里会起作用。。。
我希望你的语法也能起作用。出现此问题的原因是,当您使用列列表语法(df[[new1,new2]]=…)创建新列时,pandas要求右侧是数据帧(请注意,数据帧的列是否与您创建的列具有相同的名称并不重要)
您的语法可以很好地将标量值分配给现有的列,pandas也很乐意使用单列语法(df[new1]=…)将标量值分配给新列。因此,解决方案是要么将其转换为多个单列分配,要么为右侧创建合适的数据帧
以下是几种将起作用的方法:
将熊猫作为pd导入
将numpy作为np导入
df=pd.DataFrame({
“col_1”:[0,1,2,3],
“col_2”:[4,5,6,7]
})
然后是以下其中一项:
1) 三个作业合一,使用列表解包:
df['column_new_1'],df['column_new_2'],df['column_new_3']=[np.nan,'dogs',3]
2) DataFrame方便地扩展一行以匹配索引,因此您可以执行以下操作:
df['column\u new\u 1','column\u new\u 2','column\u new\u 3']=pd.DataFrame([[np.nan',dogs',3]],index=df.index)
3) 使用新列创建临时数据框,然后稍后与原始数据框合并:
df=pd.concat(
[
df,
数据帧(
[[np.nan,'狗',3]],
index=df.index,
columns=['column_new_1'、'column_new_2'、'column_new_3']
)
],轴=1
)
4) 与前面的类似,但使用join而不是concat(可能效率较低):
df=df.join(pd.DataFrame(
[[np.nan,’狗’,3]],
index=df.index,
columns=[‘column_new_1’、’column_new_2’、’column_new_3’]
))
5) 与前两种方法相比,使用dict是创建新数据帧的更“自然”的方法,但新列将按字母顺序排序(至少在Python 3.6或3.7之前):
df=df.join(pd.DataFrame(
{
“column_new_1”:np.nan,
“新专栏”:”狗”,,
“column_new_3”:3
},index=df.index
))
6) 对多个列参数使用.assign()
我非常喜欢@zero答案中的这个变体,但与前一个一样,新列总是按字母顺序排序,至少在早期版本的Python中是这样的:
df=df.assign(新列1=np.nan,新列2=dogs,新列3=3)
7) 这很有趣(基于https://stackoverflow.com/a/44951376/3830997),但我不知道什么时候值得这么麻烦:
new\u cols=['column\u new\u 1','column\u new\u 2','column\u new\u 3']
new_vals=[np.nan,'狗',3]
df=df.reindex(columns=df.columns.tolist()+新列)#添加空列
df[new_cols]=新的_vals#现有cols的多列赋值工作
8) 最后,很难击败三项不同的任务:
df['column\u new\u 1']=np.nan
df['column_new_2']='dogs'
df['column_new_3']=3
注意:这些选项中的许多已在其他答案中介绍:向DataFrame添加多个列并将其设置为等于现有列,是否可以向pandas DataFrame一次添加多个列?向pandas DataFrame添加多个空列