【问题标题】:Pandas read_csv reads NaN as "" when using regex sepPandas read_csv 在使用正则表达式 sep 时将 NaN 读取为“”
【发布时间】:2021-08-27 02:18:44
【问题描述】:

当我向read_csv 提供正则表达式sep 参数时,例如下面示例中的[,\t],我得到读取为"" 的NaN 值。我怀疑这可能是一个错误,但正在寻找有关解决方法的建议或有人解释为什么它不是错误。这似乎只有在 DataFrame 只有一列时才会发生

import numpy as np
import pandas as pd

file_path = "temp.csv"

df = pd.DataFrame({"x": [np.nan, 1]})
df.to_csv(file_path, index=False)
df1 = pd.read_csv(file_path, sep=',')
df2 = pd.read_csv(file_path, sep='[,\t]')

print(f"-----------\ndf1\n{df1}")
print(f"-----------\ndf2\n{df2}")

输出

-----------
df1
     x
0  NaN
1  1.0
-----------
df2
     x
0   ""
1  1.0

【问题讨论】:

  • 这不是错误,这是正确的行为。来自文档:“请注意,正则表达式分隔符容易忽略引用的数据。” (对于“python”引擎)

标签: python regex pandas dataframe


【解决方案1】:

修复它:

>>> pd.read_csv(file_path, sep='[,\t]', na_values='""', engine="python")
     x
0  NaN
1  1.0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-17
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多