gpt4 book ai didi

python - 在 Pandas 中,如果列最初为空,如何使用 fillna 将整个列填充为字符串?

转载 作者:太空狗 更新时间:2023-10-29 18:26:40 25 4
gpt4 key购买 nike

我的 table :

In [15]: csv=u"""a,a,,a
....: b,b,,b
....: c,c,,c
....: """

In [18]: df = pd.read_csv(io.StringIO(csv), header=None)

将空列填写为“未知”

In [19]: df
Out[19]:
0 1 2 3
0 a a NaN a
1 b b NaN b
2 c c NaN c

In [20]: df.fillna({2:'UNKNOWN'})

得到错误

ValueError: could not convert string to float: UNKNOWN

最佳答案

您的 2 列可能有一个 float 数据类型:

>>> df
0 1 2 3
0 a a NaN a
1 b b NaN b
2 c c NaN c
>>> df.dtypes
0 object
1 object
2 float64
3 object
dtype: object

问题由此而来。如果您不介意将整个框架转换为 object,您可以:

>>> df.astype(object).fillna("UNKNOWN")
0 1 2 3
0 a a UNKNOWN a
1 b b UNKNOWN b
2 c c UNKNOWN c

根据是否存在非字符串数据,您可能希望更有选择性地转换列数据类型,和/或在读取时指定数据类型,但无论如何,上述方法应该有效。


更新:如果您有想要保留的 dtype 信息,而不是将其切换回来,我会采用另一种方式,只填充您想要的列,或者使用带有 fillna :

>>> df
0 1 2 3 4 5
0 0 a a NaN a NaN
1 1 b b NaN b NaN
2 2 c c NaN c NaN
>>> df.dtypes
0 int64
1 object
2 object
3 float64
4 object
5 float64
dtype: object
>>> for col in df.columns[pd.isnull(df).all()]:
... df[col] = df[col].astype(object).fillna("UNKNOWN")
...
>>> df
0 1 2 3 4 5
0 0 a a UNKNOWN a UNKNOWN
1 1 b b UNKNOWN b UNKNOWN
2 2 c c UNKNOWN c UNKNOWN
>>> df.dtypes
0 int64
1 object
2 object
3 object
4 object
5 object
dtype: object

或者(如果您正在使用 all),那么甚至可能根本不使用 fillna:

>>> df
0 1 2 3 4 5
0 0 a a NaN a NaN
1 1 b b NaN b NaN
2 2 c c NaN c NaN
>>> df.ix[:,pd.isnull(df).all()] = "UNKNOWN"
>>> df
0 1 2 3 4 5
0 0 a a UNKNOWN a UNKNOWN
1 1 b b UNKNOWN b UNKNOWN
2 2 c c UNKNOWN c UNKNOWN

关于python - 在 Pandas 中,如果列最初为空,如何使用 fillna 将整个列填充为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16067144/

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