【发布时间】:2022-01-18 20:17:21
【问题描述】:
我有以下数据框,其中所有列都是对象类型。 我的目标是推断每列的真实类型并进行转换。
我找到了一个“解决方法”并将其保存为 csv,然后再次加载。
有什么方法可以使用pandas read_csv 类型转换功能而不需要保存和加载文件?
{'A': {0: nan,
1: nan,
2: nan,
3: nan,
4: nan,
5: nan,
6: nan,
7: 'true',
8: nan,
9: 'true'},
'B': {0: nan,
1: nan,
2: nan,
3: nan,
4: nan,
5: nan,
6: nan,
7: 'true',
8: nan,
9: 'true'},
'C': {0: 'CustomersData',
1: 'CustomersData',
2: 'CustomersData',
3: 'CustomersData',
4: 'CustomersData',
5: 'CustomersData',
6: 'CustomersData',
7: 'TestData',
8: 'CustomersData',
9: 'CustomersData'},
'D': {0: '4014',
1: '4014',
2: '4014',
3: '4014',
4: '4014',
5: '4014',
6: '4014',
7: '500',
8: '4014',
9: '500'},
'E': {0: '8',
1: '8',
2: '8',
3: '8',
4: '8',
5: '8',
6: '13',
7: '13',
8: '8',
9: '13'}}
这是我正在做的事情:
df.to_csv('test.csv')
test_df = pd.read_csv('test.csv')
test_df.dtypes
仅当我使用此解决方法时,pandas read_csv 才会正确推断像“1”和“4044”这样的字符串为整数。
我试过 convert_dtypes() 将所有列都转换为字符串,infer_objects() 也没有做任何事情。
【问题讨论】:
-
当您转换为 csv 时,它可能会删除单引号,而当您读回它时, read_csv 会将它们作为整数。如果在创建数据框时删除单引号,convert_dtypes() 也会假定它们是整数。
-
@Jayvee 感谢您的评论,但实际上上述结果是一个长键值表/数据框的数据透视表。如何配置数据透视表以删除它们?实际上它转向了对象。请指教。
-
我不确定如何在数据透视表中执行此操作,但您始终可以使用 astype 在数据框中显式更改类型,例如 df['D'] = df['D '].astype(int)
-
@Jayvee 但我不知道类型,这就是我需要 pandas 来推断这个系统中的类型的点。它将自动从数据库加载,转换为数据透视表,推断类型,填充缺失值......并执行所有其他逻辑。
标签: python-3.x pandas dataframe type-inference