有没有办法从 pandas Read_CSV中提取数据类型转换功能? [英] Is there any way to "extract" the dtype conversion functionality from pandas read_csv?

查看:0
本文介绍了有没有办法从 pandas Read_CSV中提取数据类型转换功能?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下数据帧,其中所有列都是对象类型。 我的目标是推断出每一列的真实类型并进行转换。

我已找到解决办法并将其另存为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()也未执行任何操作。

推荐答案

根据评论,使推断类型受益的实际过程是TO_csv,因为它去掉了单引号。也许您可以使用一些底层的TO_CSV类和函数(DataFrameForMatter、DataFrameRender、CSVForMatter等)。但这将是更多的代码和更大的出错风险。 您可以做的是写入缓冲区和从缓冲区读取,以避免IO开销。

d={'A': {0: np.NaN,
      1: np.NaN,
      2: np.NaN,
      3: np.NaN,
      4: np.NaN,
      5: np.NaN,
      6: np.NaN,
      7: 'true',
      8: np.NaN,
      9: 'true'},
     'B': {0: np.NaN,
      1: np.NaN,
      2: np.NaN,
      3: np.NaN,
      4: np.NaN,
      5: np.NaN,
      6: np.NaN,
      7: 'true',
      8: np.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=pd.DataFrame(d)

from io import StringIO

buffer=StringIO()
df.to_csv(buffer, index=False)
df_new=pd.read_csv(StringIO(buffer.getvalue()))


df_new.dtypes

输出:

A    object
B    object
C    object
D     int64
E     int64
dtype: object

然后可以使用CONVERT_TYPE获得最佳推断:

df_new.convert_dtypes().dtypes

输出:

A    boolean
B    boolean
C     string
D      Int64
E      Int64
dtype: object

这篇关于有没有办法从 pandas Read_CSV中提取数据类型转换功能?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆