调查Pandas DataFrame中的不同数据类型

时间:2014-06-09 14:04:34

标签: python csv import casting pandas

我有4个文件,我想用Python / Pandas阅读,文件是:https://github.com/kelsey9649/CS8370Group/tree/master/TaFengDataSet 我在所有4个文件中删除了第一行(中文列标题)。 但除此之外,4个文件应该具有相同的格式。

现在我想阅读它们并合并到一个大的DataFrame中。我尝试使用

pars = {'sep':          ';',
            'header':       None,
            'names':        ['date','customer_id','age','area','prod_class','prod_id','amount','asset','price'], 
            'parse_dates':  [0]}

df = pd.DataFrame()
for i in ('01', '02', '12', '11'):
    df = df.append(pd.read_csv(cfg.abspath+'D'+i,**pars))

但是:文件D11为我提供了不同格式的单列,因此无法正确合并。该文件包含超过200k行,因此我不能轻易地在该文件中查找问题,但如上所述,我假设它具有相同的格式,但显然格式有一些小差异。

现在调查问题的最简单方法是什么?显然,我无法检查该文件中的每一行......

当我读取3个工作文件并合并它们时;独立阅读D11,

A = pd.read_csv(cfg.abspath+'D11',**pars)

仍然给我以下警告:

C:\Python27\lib\site-packages\pandas\io\parsers.py:1130: DtypeWarning: Columns (
1,4,5,6,7,8) have mixed types. Specify dtype option on import or set low_memory=
False.
  data = self._reader.read(nrows)

在pandas(.info()A)中使用df方法产生:

<class 'pandas.core.frame.DataFrame'>
Int64Index: 594119 entries, 0 to 178215
Data columns (total 9 columns):
date           594119 non-null datetime64[ns]
customer_id    594119 non-null int64
age            594119 non-null object
area           594119 non-null object
prod_class     594119 non-null int64
prod_id        594119 non-null int64
amount         594119 non-null int64
asset          594119 non-null int64
price          594119 non-null int64
dtypes: datetime64[ns](1), int64(6), object(2)

<class 'pandas.core.frame.DataFrame'>
Int64Index: 223623 entries, 0 to 223622
Data columns (total 9 columns):
date           223623 non-null object
customer_id    223623 non-null object
age            223623 non-null object
area           223623 non-null object
prod_class     223623 non-null object
prod_id        223623 non-null object
amount         223623 non-null object
asset          223623 non-null object
price          223623 non-null object

即使我在导入时使用dtype-option,我仍然会以某种方式害怕错误/错误的结果,因为在导入时可能会发生一些错误的数据类型转换!?

如何克服并解决问题? 非常感谢

1 个答案:

答案 0 :(得分:2)

每当你遇到一个太无聊而无法手工完成的问题时,解决办法就是写一个程序:

for col in ('age', 'area'):
    for i, val in enumerate(A[col]):
        try:
            int(val)
        except:
            print('Line {}: {} = {}'.format(i, col, val))

这将显示文件中agearea列中包含非整数值的所有行。这是调试问题的第一步。一旦你知道有问题的值是什么,你可以更好地决定如何处理它们 - 可能通过预处理(清理)数据文件,或通过使用一些pandas代码来选择和修复有问题的值。