为什么我在数据框中读取dtype'object'?

时间:2018-05-07 09:13:56

标签: python csv dataframe types

我是Python的新手,我想确定数据框中每列的类型,我编写了下面的代码,但结果并不像预期的那样,我只得到类型的“对象”。

这是我的数据框(只是第7列):

      IDINDUSANALYSE    IDINDUS IDINDUSEFFLUENT DATEANALYSE IDTYPEECHANTILLON   IDPRELEVEUR IDLABO  IDORIGINEVAL    CONFORME    CONFCALC    IDINDDOSS   CONFFORCE
  672   635 6740    10/01/13    2   1   3   1   1   1   531 0
  673   635 6740    11/01/13    2   1   3   1   1   1   531 0
  674   635 6740    14/01/13    2   1   3   1   1   1   531 0
  675   635 6740    15/01/13    2   1   3   1   1   1   531 0
  676   635 6740    16/01/13    2   1   3   1   1   1   531 0
  677   635 6740    18/01/13    2   1   3   1   1   1   531 0

这是我的代码:

import pandas as pd
import csv

with open("/home/***/Documents/Table3.csv") as f:
    r = csv.reader(f)

df = pd.DataFrame().from_records(r)
for index, row in df.iterrows():
    print(df.dtypes)   

结果我得到了这个:

0      object
1      object
2      object
3      object
4      object

请告诉我们我做错了什么?

3 个答案:

答案 0 :(得分:1)

types = df.columns.to_series().groupby(df.dtypes).groups

然后打印出types,您将获得所有列类型(按类型分组)。

此外,您可以使用以下命令将.csv文件直接打开到数据框:pd.read_csv(filepath)

如果您想要特定列的类型 - df.column.dtypedf['column'].dtype

答案 1 :(得分:1)

试试这个

import pandas as pd
df = pd.read_csv("/home/***/Documents/Table3.csv")
types = [df['{0}'.format(i)].dtype for i in df.columns]
print(types)

结果为

[dtype('float64'), dtype('O'), dtype('O')]

考虑到您的实际数据框有4列,但结果为object 5次,这是您的第一个提示。

答案 2 :(得分:0)

请显示您的实际CSV文件。如果所有列都存储为object,则看起来它们被检测为字符串,可能是因为您的CSV文件引用了每个字段。但是发布您的实际CSV文件。

要读入pandas中的引用字段并将其转换回其类型(数字/分类),请执行以下任一操作:

pd.read_csv(..., quoting = pd.QUOTE_ALL)
pd.read_csv(..., quoting = pd.QUOTE_NONNUMERIC)

并阅读https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

中的“引用”部分

但是,明确传递pd.read_csv(..., dtype={...}一个字典告诉它每个列名使用哪种类型也是一个好习惯。  e.g. {‘a’: np.float64, ‘b’: np.int32}