我试图弄清楚如何同时添加多个列的熊猫与熊猫。我希望在一个步骤中做到这一点,而不是重复多个步骤。
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] # I thought this would work here...
在编写Pandas时,我的目标是编写可以链接的高效可读代码。我不会在这里解释为什么我这么喜欢链接,我在我的书《Effective Pandas》中对此进行了阐述。
我经常希望以简洁的方式添加新列,这也允许我进行链接。我的一般规则是使用.assign方法更新或创建列。
为了回答你的问题,我将使用以下代码:
(df
.assign(column_new_1=np.nan,
column_new_2='dogs',
column_new_3=3
)
)
再深入一点。我经常有一个数据框架,其中有我想要添加到我的数据框架的新列。让我们假设它看起来像…一个你想要的三列的数据框架:
df2 = pd.DataFrame({'column_new_1': np.nan,
'column_new_2': 'dogs',
'column_new_3': 3},
index=df.index
)
在这种情况下,我将编写以下代码:
(df
.assign(**df2)
)
在编写Pandas时,我的目标是编写可以链接的高效可读代码。我不会在这里解释为什么我这么喜欢链接,我在我的书《Effective Pandas》中对此进行了阐述。
我经常希望以简洁的方式添加新列,这也允许我进行链接。我的一般规则是使用.assign方法更新或创建列。
为了回答你的问题,我将使用以下代码:
(df
.assign(column_new_1=np.nan,
column_new_2='dogs',
column_new_3=3
)
)
再深入一点。我经常有一个数据框架,其中有我想要添加到我的数据框架的新列。让我们假设它看起来像…一个你想要的三列的数据框架:
df2 = pd.DataFrame({'column_new_1': np.nan,
'column_new_2': 'dogs',
'column_new_3': 3},
index=df.index
)
在这种情况下,我将编写以下代码:
(df
.assign(**df2)
)
只是想指出@Matthias Fripp回答中的选项2
(2)我并不一定期望DataFrame以这种方式工作,但它确实如此
df[[‘column_new_1’,‘column_new_2’,‘column_new_3]] = pd.DataFrame ([[np。Nan, 'dogs', 3]], index=df.index)
熊猫自己的文档中已经有记录了吗
http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics
您可以将列列表传递给[]以按此顺序选择列。
如果数据帧中不包含列,则会引发异常。
也可以通过这种方式设置多个列。
您可能会发现这对于将转换(就地)应用到列的子集很有用。
concat的用法:
In [128]: df
Out[128]:
col_1 col_2
0 0 4
1 1 5
2 2 6
3 3 7
In [129]: pd.concat([df, pd.DataFrame(columns = [ 'column_new_1', 'column_new_2','column_new_3'])])
Out[129]:
col_1 col_2 column_new_1 column_new_2 column_new_3
0 0.0 4.0 NaN NaN NaN
1 1.0 5.0 NaN NaN NaN
2 2.0 6.0 NaN NaN NaN
3 3.0 7.0 NaN NaN NaN
不太确定你想用它做什么。南,“狗”,3)。也许现在把它们设置为默认值?
In [142]: df1 = pd.concat([df, pd.DataFrame(columns = [ 'column_new_1', 'column_new_2','column_new_3'])])
In [143]: df1[[ 'column_new_1', 'column_new_2','column_new_3']] = [np.nan, 'dogs', 3]
In [144]: df1
Out[144]:
col_1 col_2 column_new_1 column_new_2 column_new_3
0 0.0 4.0 NaN dogs 3
1 1.0 5.0 NaN dogs 3
2 2.0 6.0 NaN dogs 3
3 3.0 7.0 NaN dogs 3
我不习惯使用“Index”等等。可以如下所示
df.columns
Index(['A123', 'B123'], dtype='object')
df=pd.concat([df,pd.DataFrame(columns=list('CDE'))])
df.rename(columns={
'C':'C123',
'D':'D123',
'E':'E123'
},inplace=True)
df.columns
Index(['A123', 'B123', 'C123', 'D123', 'E123'], dtype='object')