我是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
请告诉我们我做错了什么?
答案 0 :(得分:1)
types = df.columns.to_series().groupby(df.dtypes).groups
然后打印出types
,您将获得所有列类型(按类型分组)。
此外,您可以使用以下命令将.csv文件直接打开到数据框:pd.read_csv(filepath)
如果您想要特定列的类型 - df.column.dtype
或df['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}