pandas:DTypeWarning,但我指定了dtypes

时间:2017-04-29 17:51:01

标签: python python-3.x csv pandas dataframe

我正在使用以下内容阅读Pandas Dataframe:

df = pd.read_csv('../table.csv.gz', nrows=10000,
                 index_col=False, engine='c',
                 true_values=[b'1'], false_values=[b'0'],
                 usecols=usecols, dtype=dtype)

我收到以下警告:

DtypeWarning: Columns (5,2397,2402,2449) have mixed types. Specify dtype option on import or set low_memory=False.

但是这些列的标题名称存在于dtype中。所有这些列的指定类型都是np.bool,csv文件中这些列中唯一的值是'1'''(逗号之间没有任何内容。这会给出一个列键入object,并在调用bool时变为类型DataFrame.fillna

此外,当我编辑CSV文件以删除除了有问题的列之外的所有列以尝试查明警告的来源时,警告将停止发生。

发生了什么事?这是read_csv中的错误吗?我应该忽略这个警告吗?

1 个答案:

答案 0 :(得分:1)

所以我猜你的问题是当你在阅读文件时,你实际上有两个不同类型的值为这些列:np.bool('1')和np.nan(''),所以实际上如果你是告诉它将列视为np.bool它不会这样做。我想你可以尝试使用相同的只是将false_values参数更改为false_values = [b'']

23
6
    2
        6
        2
        1
        2

如果这不起作用,你也可以这样做:

df = pd.read_csv('../table.csv.gz', nrows=10000,
             index_col=False, engine='c',
             true_values=[b'1'], false_values=[b''],
             usecols=usecols, dtype=dtype)

现在当你读回来时,你实际上应该有0。

df.loc[:,[5,2397,2402,2449]].fillna('0',inplace = True)
df.to_csv('../table.csv.gz')