向pandas DataFrame对象添加空列的最简单方法是什么?我碰到的最好的是
df['foo'] = df.apply(lambda _: '', axis=1)
有没有更合理的方法?
向pandas DataFrame对象添加空列的最简单方法是什么?我碰到的最好的是
df['foo'] = df.apply(lambda _: '', axis=1)
有没有更合理的方法?
当前回答
这也适用于多个列:
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
A B
0 1 2
1 2 3
2 3 4
df1 = pd.DataFrame(columns=['C','D','E'])
df = df.join(df1, how="outer")
>>>df
A B C D E
0 1 2 NaN NaN NaN
1 2 3 NaN NaN NaN
2 3 4 NaN NaN NaN
然后对列做任何你想做的事情 pd.Series.map pd.Series.fillna (), () 等。
其他回答
为了补充DSM的答案,并在这个相关问题的基础上,我将这种方法分为两种情况:
添加单列:只需为新列分配空值,例如df['C'] = np.nan 添加多个列:我建议使用pandas的.reindex(columns=[…])方法将新列添加到数据帧的列索引中。这也适用于使用.reindex(rows=[…])添加多个新行。注意,更新版本的Pandas (v>0.20)允许您指定axis关键字,而不是显式地分配给列或行。
下面是一个添加多列的例子:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
or
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
你也可以总是连接一个新的(空的)数据框架到现有的数据框架,但这对我来说不像python式的:)
我喜欢:
df['new'] = pd.Series(dtype='int')
# or use other dtypes like 'float', 'object', ...
如果您有一个空的数据框架,这个解决方案确保没有只包含NaN的新行被添加。
指定dtype并不是必须的,但是如果没有指定dtype,更新的Pandas版本会产生DeprecationWarning。
可以用df。插入(index_to_insert_at, column_header, init_value)在特定索引处插入新列。
cost_tbl.insert(1, "col_name", "")
上面的语句将在第一列之后插入一个空列。
你可以这样做
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
如果我理解正确,assignment应该填写:
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
>>> df
A B
0 1 2
1 2 3
2 3 4
>>> df["C"] = ""
>>> df["D"] = np.nan
>>> df
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN