python - 研究 Pandas DataFrame 中的不同数据类型

标签 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()(对于Adf)会产生:

<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,我仍然会害怕错误/糟糕的结果,因为导入时可能会发生一些错误的数据类型转换!?

如何克服和解决这个问题? 非常感谢

最佳答案

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

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

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

关于python - 研究 Pandas DataFrame 中的不同数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24121983/

相关文章:

r - 在 R 函数中存储数据

python - 除了引号内的逗号外,如何在 Python 中拆分逗号分隔的字符串

ios - 如何将包 'Storage' 导入到 Swift 项目中?

json - AWS CloudFront - 跨 CloudFront 堆栈导入参数作为 "global"参数

Python 3.1-网格模拟概念问题

python - 如何组合目录和文件路径以创建新路径?

csv - 将 slice 附加到 csv golang

database - Oracle -- 将数据导入到具有不同名称的表中?

python - 在Python中解析包含反斜杠的字符串以列出

Python Numpy 将旋转矩阵应用于数组中的每一行