numpy 如何向dataframe列中的所有单元格添加相同的值(Python中的pandas)

kgqe7b3p  于 2023-06-29  发布在  Python
关注(0)|答案(3)|浏览(191)

我有一个EXCEL表,我想转移到一个dataframe匹配我们的项目的标准与22个不同的列。然而,原始的EXCEL表只有13列,所以我试图将丢失的列添加到从文件中读取的数据框中。
然而,这也带来了一些挑战:
1.当给dataframe分配一个空列表[]时,我得到一个通知,即添加的列的大小与原始的dataframe不匹配,原始的dataframe大约有9000行。
1.当将np.nan分配给dataframe时,创建包含所有必需列的联合dataframe工作正常:
f_unique.loc[:, "additional_info"] = np.nan
但是数据中包含np.nan会在稍后的脚本中导致问题,因为所有其他单元格都包含列表,所以我会展平单元格数据。
所以我尝试用一个包含字符串“n/a”的列表替换np.nan
grouped_df = grouped_df.replace(np.nan, ["n/a"])
然而,这给了我以下错误:
TypeError: Invalid "to_replace" type: 'float'
有没有一种方法可以直接将9000 x [“n/a”]分配给 Dataframe 中的每个新列?这很有可能解决这个问题。

vwkv1x7d

vwkv1x7d1#

DataFrame.reindexIndex.union一起使用,对于用于填充列表的新列:

df = pd.DataFrame({'a':range(3)})

new_cols = ['additional_info','new']

df = df.reindex(df.columns.union(new_cols, sort=False), axis=1, fill_value=[])
print (df)
   a additional_info new
0  0              []  []
1  1              []  []
2  2              []  []
df = df.reindex(df.columns.union(new_cols, sort=False), axis=1, fill_value=["n/a"])
print (df)
   a additional_info    new
0  0           [n/a]  [n/a]
1  1           [n/a]  [n/a]
2  2           [n/a]  [n/a]
trnvg8h3

trnvg8h32#

reindex

out = df.reindex(columns=list_of_cols)

如果你想要一个列表作为默认值(你应该避免):

out = df.reindex(columns=list_of_cols, fill_value=['n/a'])
uubf1zoe

uubf1zoe3#

在一天结束时,上面的重新索引(参见答案)结合多次将相同的列表分配给dataframe列对我的用例效果最好:

df2 = f_unique.reindex(columns=column_names, fill_value="n/a")

# populate some of the empty columns with data

df2.loc[:, "event_end"] = df2["event_start"]
df2.loc[:, "event_type"] = ["Funktionsausübung"] * 31414

多次添加列表当然不是最优雅的解决方案,但它确实做到了。

相关问题