我是熊猫的新手,并试图弄清楚如何同时向熊猫添加多列。任何帮助在这里表示赞赏。理想情况下,我想一步完成,而不是多个重复步骤......
import pandas as 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] #thought this would work here...
我本来希望你的语法也能工作。出现问题是因为当您使用列列表语法 ( df[[new1, new2]] = ...) 创建新列时,pandas 要求右侧是 DataFrame(请注意,DataFrame 的列是否与列同名实际上并不重要你正在创造)。
df[[new1, new2]] = ...
您的语法适用于将标量值分配给 现有 列,pandas 也很乐意使用单列语法 ( df[new1] = ...) 将标量值分配给新列。所以解决方案是要么将其转换为几个单列赋值,要么为右侧创建一个合适的 DataFrame。
df[new1] = ...
以下是几种可行的 方法 :
import pandas as pd import numpy as np df = pd.DataFrame({ 'col_1': [0, 1, 2, 3], 'col_2': [4, 5, 6, 7] })
然后是以下之一:
df['column_new_1'], df['column_new_2'], df['column_new_3'] = [np.nan, 'dogs', 3]
DataFrame
df[['column_new_1', 'column_new_2', 'column_new_3']] = pd.DataFrame([[np.nan, 'dogs', 3]], index=df.index)
df = pd.concat( [ df, pd.DataFrame( [[np.nan, 'dogs', 3]], index=df.index, columns=['column_new_1', 'column_new_2', 'column_new_3'] ) ], axis=1 )
join
concat
df = df.join(pd.DataFrame( [[np.nan, 'dogs', 3]], index=df.index, columns=['column_new_1', 'column_new_2', 'column_new_3'] ))
之前](https://stackoverflow.com/q/39980323/3830997)):
df = df.join(pd.DataFrame( { 'column_new_1': np.nan, 'column_new_2': 'dogs', 'column_new_3': 3 }, index=df.index ))
.assign()
我非常喜欢@zero 的答案中的这个变体,但与前一个一样,新列将始终按字母顺序排序,至少对于早期版本的 Python:
df = df.assign(column_new_1=np.nan, column_new_2='dogs', column_new_3=3)
7)这很有趣,但我不知道什么时候值得麻烦:
new_cols = ['column_new_1', 'column_new_2', 'column_new_3'] new_vals = [np.nan, 'dogs', 3] df = df.reindex(columns=df.columns.tolist() + new_cols) # add empty cols df[new_cols] = new_vals # multi-column assignment works for existing cols
df['column_new_1'] = np.nan df['column_new_2'] = 'dogs' df['column_new_3'] = 3