gpt4 book ai didi

python - 将行插入到 Pandas DataFrame 中,同时保持列数据类型

转载 作者:行者123 更新时间:2023-12-02 01:00:47 27 4
gpt4 key购买 nike

在保持列数据类型的同时,为未指定的列提供用户定义的填充值的同时,将新行插入到现有的 Pandas DataFrame 中的最佳方法是什么?下面是一个例子:

df = pd.DataFrame({
'name': ['Bob', 'Sue', 'Tom'],
'age': [45, 40, 10],
'weight': [143.2, 130.2, 34.9],
'has_children': [True, True, False]
})

假设我想添加一条刚刚通过的新记录 nameage .为了维护数据类型,我可以从 df 复制行。 , 修改值然后追加 df到副本,例如
columns = ('name', 'age')
copy_df = df.loc[0:0, columns].copy()
copy_df.loc[0, columns] = 'Cindy', 42
new_df = copy_df.append(df, sort=False).reset_index(drop=True)

但这会转换 bool列到对象。

这是一个非常hacky的解决方案,感觉不像是这样做的“正确方法”:
columns = ('name', 'age')
copy_df = df.loc[0:0].copy()

missing_remap = {
'int64': 0,
'float64': 0.0,
'bool': False,
'object': ''
}
for c in set(copy_df.columns).difference(columns)):
copy_df.loc[:, c] = missing_remap[str(copy_df[c].dtype)]

new_df = copy_df.append(df, sort=False).reset_index(drop=True)
new_df.loc[0, columns] = 'Cindy', 42

我知道我一定错过了什么。

最佳答案

如您所见,自 NaNfloat , 添加 NaN到一个系列可能会导致它被向上转换为 float或转换为 object .您确定这不是理想的结果是正确的。

没有直接的方法。我的建议是将您的输入行数据存储在字典中,并在追加之前将其与默认字典组合。请注意,这是有效的,因为 pd.DataFrame.append接受 dict争论。

在 Python 3.6 中,您可以使用语法 {**d1, **d2}结合两个字典,优先选择第二个。

default = {'name': '', 'age': 0, 'weight': 0.0, 'has_children': False}

row = {'name': 'Cindy', 'age': 42}

df = df.append({**default, **row}, ignore_index=True)

print(df)

age has_children name weight
0 45 True Bob 143.2
1 40 True Sue 130.2
2 10 False Tom 34.9
3 42 False Cindy 0.0

print(df.dtypes)

age int64
has_children bool
name object
weight float64
dtype: object

关于python - 将行插入到 Pandas DataFrame 中,同时保持列数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50650850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com