如何确保Pandas不会将数字字符串解释为Pandas中的数字?

时间:2017-10-06 14:57:32

标签: python pandas csv

我的代码读取这样的CSV:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import pandas as pd

csv_path = 'test.csv'
df = pd.read_csv(csv_path, delimiter=';', quotechar='"',
                 decimal=',', encoding="ISO-8859-1", dtype={'FOO': str})
df.FOO = df.FOO.map(lambda n: n.zfill(6))

我得到了

AttributeError: 'float' object has no attribute 'zfill'
很明显,Pandas将列FOO解释为数字。它是数字,但我不想将其解释为数字

(我知道df.FOO = df.FOO.map(lambda n: str(n).zfill(6))会让问题消失,但我想知道为什么会出现这个问题。)

我使用pandas 0.20.3。

示例CSV

FOO;BAR
01,23;4,56
1,23;45,6
;987

1 个答案:

答案 0 :(得分:1)

问题是空单元格。

该行

df.FOO = df.FOO.fillna(value="")

给出了所需的行为,但这似乎是一个非常糟糕的解决方案。

我不确定天气这是一个错误或期望的行为:https://github.com/pandas-dev/pandas/issues/17810