我是熊猫的新手,并试图弄清楚如何同时向熊猫添加多列。任何帮助在这里表示赞赏。理想情况下,我想一步完成,而不是多个重复步骤……
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...
原文由 runningbirds 发布,翻译遵循 CC BY-SA 4.0 许可协议
我本来希望你的语法也能工作。出现问题是因为当您使用列列表语法(
df[[new1, new2]] = ...
)创建新列时,pandas 要求右侧是 DataFrame(请注意,DataFrame 的列是否实际上并不重要与您正在创建的列具有相同的名称)。您的语法适用于将标量值分配给 现有 列,pandas 也很乐意使用单列语法(
df[new1] = ...
)将标量值分配给新列。所以解决方案要么将其转换为几个单列赋值,要么为右侧创建一个合适的 DataFrame。以下是几种可行的 _方法_:
然后是以下之一:
1)三赋值合一,使用列表解包:
2)
DataFrame
方便地扩展单行以匹配索引,因此您可以这样做:3)用新列制作一个临时数据框,然后与原始数据框合并:
4)与前面类似,但使用
join
而不是concat
(可能效率较低):5) 使用 dict 是一种比前两种更“自然”的方式来创建新数据框,但新列将按字母顺序排序(至少 在 Python 3.6 或 3.7 之前):
6) 使用
.assign()
与多个列参数。我非常喜欢@zero 的答案中的这个变体,但与前一个一样,新列将始终按字母顺序排序,至少对于早期版本的 Python:
7)这很有趣(基于 https://stackoverflow.com/a/44951376/3830997 ),但我不知道什么时候值得麻烦:
8)最后很难击败三个独立的任务:
注意:许多这些选项已经在其他答案中介绍过: Add multiple columns to DataFrame and set them equal to an existing column , Is it possible to add multiple columns to a pandas DataFrame? , 向 pandas DataFrame 添加多个空列