向pandas DataFrame对象添加空列的最简单方法是什么?我碰到的最好的是
df['foo'] = df.apply(lambda _: '', axis=1)
有没有更合理的方法?
向pandas DataFrame对象添加空列的最简单方法是什么?我碰到的最好的是
df['foo'] = df.apply(lambda _: '', axis=1)
有没有更合理的方法?
当前回答
我寻找这样一个解决方案的原因只是在多个df之间添加空格,这些df已经使用pd按列连接。Concat函数,然后使用xlsxwriter写入excel。
df[' ']=df.apply(lambda _: '', axis=1)
df_2 = pd.concat([df,df1],axis=1) #worked but only once.
# Note: df & df1 have the same rows which is my index.
#
df_2[' ']=df_2.apply(lambda _: '', axis=1) #didn't work this time !!?
df_4 = pd.concat([df_2,df_3],axis=1)
然后将第二个lambda调用替换为
df_2['']='' #which appears to add a blank column
df_4 = pd.concat([df_2,df_3],axis=1)
我测试的输出是使用xlsxwriter到excel。 Jupyter空白列看起来和excel一样,虽然没有xlsx格式。 不知道为什么第二个Lambda调用没有工作。
其他回答
如果您想从列表中添加列名
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
下面的代码解决了“如何向现有数据框架中添加n个空列”的问题。为了将类似问题的解决方案保存在一个地方,我在这里添加了它。
方法1(创建64个附加列,列名从1到64)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
方法2(创建64个附加列,列名从1到64)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
df["C"] = ""
df["D"] = np.nan
赋值会给你这个警告SettingWithCopyWarning:
一个值正试图从数据帧(DataFrame)中设置一个片的副本。试一试 使用.loc[row_indexer,col_indexer] = value代替
所以最好使用insert:
df.insert(index, column-name, column-value)
我喜欢:
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", "")
上面的语句将在第一列之后插入一个空列。