将空列添加到pandas DataFrame
对象的最简单方法是什么?我偶然发现的最好的就像是
df['foo'] = df.apply(lambda _: '', axis=1)
Run Code Online (Sandbox Code Playgroud)
是否有一种不那么不正常的方法?
DSM*_*DSM 348
如果我理解正确,任务应该填写:
>>> 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
Run Code Online (Sandbox Code Playgroud)
emu*_*ing 37
为了添加到DSM的答案并在此相关问题的基础上,我将该方法分为两种情况:
添加单个列:只需将空值分配给新列,例如 df['C'] = np.nan
添加多列:我建议使用.reindex(columns=[...])
pandas方法将新列添加到dataframe的列索引中.这也适用于添加多个新行.
以下是添加多个列的示例:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
Run Code Online (Sandbox Code Playgroud)
要么
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
Run Code Online (Sandbox Code Playgroud)
您也可以将新的(空)数据帧连接到现有的数据帧,但这对我来说并不像pythonic :)
Car*_*ten 33
我喜欢:
df['new'] = pd.Series(dtype='your_required_dtype')
Run Code Online (Sandbox Code Playgroud)
如果您有一个空的数据框,此解决方案可确保不NaN
添加仅包含的新行。
指定dtype
不是绝对必要的,但是较新的 Pandas 版本会产生一个DeprecationWarning
if 未指定。
小智 32
一个更简单的解决方案是:
df = df.reindex(columns = header_list)
Run Code Online (Sandbox Code Playgroud)
其中"header_list"是您要显示的标题列表.
列表中包含的任何未在数据框中找到的标题将添加下面的空白单元格.
因此,如果
header_list = ['a','b','c', 'd']
Run Code Online (Sandbox Code Playgroud)
然后将c和d添加为具有空白单元格的列
Nic*_*eli 18
从开始v0.16.0
,DF.assign()
可用于为a分配新列(单个/多个)DF
.这些列按字母顺序插入到结尾处DF
.
与在直接对返回的数据帧执行一系列链接操作的情况下的简单赋值相比,这变得有利.
考虑DF
@DSM演示的相同示例:
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]})
df
Out[18]:
A B
0 1 2
1 2 3
2 3 4
df.assign(C="",D=np.nan)
Out[21]:
A B C D
0 1 2 NaN
1 2 3 NaN
2 3 4 NaN
Run Code Online (Sandbox Code Playgroud)
请注意,这将返回包含所有先前列以及新创建的列的副本.为了相应DF
地修改原件,请使用它:df = df.assign(...)
因为它inplace
当前不支持操作.
Ank*_*our 12
df["C"] = ""
df["D"] = np.nan
Run Code Online (Sandbox Code Playgroud)
作业会给你这个警告SettingWithCopyWarning:
尝试在 DataFrame 的切片副本上设置一个值。尝试使用 .loc[row_indexer,col_indexer] = value 代替
所以最好使用insert:
df.insert(index, column-name, column-value)
Run Code Online (Sandbox Code Playgroud)
如果这个回答对你有帮助别忘了点赞哦
如果要从列表中添加列名
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
Run Code Online (Sandbox Code Playgroud)
小智 6
可以用来df.insert(index_to_insert_at, column_header, init_value)
在特定索引处插入新列。
cost_tbl.insert(1, "col_name", "")
Run Code Online (Sandbox Code Playgroud)
上面的语句将在第一列之后插入一个空列。
@emunsing 的答案对于添加多列来说真的很酷,但我无法在 python 2.7 中为我工作。相反,我发现这有效:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
319972 次 |
最近记录: |