python - 为什么 pandas str.replace 返回 NaN?

标签 python pandas

我正在尝试从 Pandas 数据框中的值中删除逗号分隔符,以便将其转换为整数。我一直在使用以下方法:

df_orders['qty'] = df_orders['qty'].str.replace(',','')

然而,对于某些最初在其值中不包含“,”的数字,这似乎返回了 NaN 值。我在下面包含了我的输入数据和当前输出的示例:

输入:

         date      sku  qty
556603  2020-10-25  A   6
590904  2020-10-21  A   5
595307  2020-10-20  A   31
602678  2020-10-19  A   11
615022  2020-10-18  A   2
641077  2020-10-16  A   1
650203  2020-10-15  A   3
655363  2020-10-14  A   18
667919  2020-10-13  A   5
674990  2020-10-12  A   2
703901  2020-10-09  A   1
715411  2020-10-08  A   1
721557  2020-10-07  A   31
740515  2020-10-06  A   49
752670  2020-10-05  A   4
808426  2020-09-28  A   2
848057  2020-09-23  A   1
865751  2020-09-21  A   2
886630  2020-09-18  A   3
901095  2020-09-16  A   47
938648  2020-09-10  A   2
969909  2020-09-07  A   3
1021548 2020-08-31  A   2
1032254 2020-08-30  A   8
1077443 2020-08-25  A   5
1089670 2020-08-24  A   24
1098843 2020-08-23  A   16
1102025 2020-08-22  A   23
1179347 2020-08-12  A   1
1305700 2020-07-29  A   1
1316343 2020-07-28  A   1
1399930 2020-07-19  A   1
1451864 2020-07-15  A   1
1463195 2020-07-14  A   15
2129080 2020-05-19  A   1
2143468 2020-05-18  A   1

当前输出:

         date      sku  qty
556603  2020-10-25  A   6
590904  2020-10-21  A   5
595307  2020-10-20  A   31
602678  2020-10-19  A   11
615022  2020-10-18  A   2
641077  2020-10-16  A   1
650203  2020-10-15  A   3
655363  2020-10-14  A   NaN
667919  2020-10-13  A   NaN
674990  2020-10-12  A   NaN
703901  2020-10-09  A   NaN
715411  2020-10-08  A   NaN
721557  2020-10-07  A   NaN
740515  2020-10-06  A   NaN
752670  2020-10-05  A   NaN
808426  2020-09-28  A   2
848057  2020-09-23  A   1
865751  2020-09-21  A   2
886630  2020-09-18  A   3
901095  2020-09-16  A   47
938648  2020-09-10  A   NaN
969909  2020-09-07  A   NaN
1021548 2020-08-31  A   NaN
1032254 2020-08-30  A   NaN
1077443 2020-08-25  A   NaN
1089670 2020-08-24  A   NaN
1098843 2020-08-23  A   NaN
1102025 2020-08-22  A   NaN
1179347 2020-08-12  A   NaN
1305700 2020-07-29  A   NaN
1316343 2020-07-28  A   1
1399930 2020-07-19  A   1
1451864 2020-07-15  A   1
1463195 2020-07-14  A   15
2129080 2020-05-19  A   1
2143468 2020-05-18  A   1

我环顾四周,但似乎无法找到导致此错误的原因。

最佳答案

我能够重现您的问题:

# toy df
df

  qty
0   1
1  2,
2   3

df['qty'].str.replace(',', '')

0    NaN
1      2
2    NaN
Name: qty, dtype: object

我通过这样做创建了 df:

df = pd.DataFrame({'qty': [1, '2,', 3]})

换句话说,您的列具有混合数据类型 - 一些值是整数,而另一些是字符串。因此,当您对混合类型应用 .str 方法时,非 str 类型将转换为 NaN 以指示“嘿,对 int 运行 str 方法没有意义”。


您可以通过将整个列转换为字符串,然后再转换回 int 来解决此问题:

df['qty'].astype(str).str.replace(',', '').astype(int) 

或者如果你想要更强大的东西,试试

df['qty'] = pd.to_numeric(
    df['qty'].astype(str).str.extract('(\d+)', expand=False), errors='coerce') 

关于python - 为什么 pandas str.replace 返回 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65436659/

相关文章:

python - 如何合并这两个DataFrame

python - 根据条件从另一列复制值

python - Pandas 数据框 : Finding entries that share values (e. g。所有包含玩家的游戏)

python 多项式拟合和导数

python - 如果在数组创建期间定义了 NumPy 数组的元素,为什么 Cython 需要更多 Python 调用?

python - 如何获取 python 类的名称?

python - 无法在 matplotlib x 轴上显示 Pandas 日期索引

python - 此模板中正确的包含路径是什么?

python - 用于 Web 应用程序的 Django 缓存

python - 打印数据框中未包含在另一个数据框中的列的值