【问题标题】:How to infer and convert dtypes in pandas dataframe?如何推断和转换熊猫数据框中的数据类型?
【发布时间】:2022-01-18 17:03:54
【问题描述】:

这是我的示例数据框。我想将AB 列中的dtypes 转换为booleanCC 中的stringDE 中的integer。 我正在尝试使用熊猫的方法convert_dtypes(),但它会为每个人返回string。如何“自动”转换类型?

{'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.convert_types().dtypes 给出:

A string
B string
C string
D string
E string

【问题讨论】:

  • pandas.pydata.org/docs/reference/api/… 不会像您认为的那样做 - 它将类型从“旧”类型转换为支持 pd.NA 的相应“新”类型 - 当您加载数据时,你应该指定你想要的特定数据类型
  • @ifly6 我把它作为每个请求的键值列,这是预处理的结果。如何推断每列并将其转换为最合适的 dtype?
  • 使用原始对象列(即在尝试调用convert_dtypes 之前)尝试pandas.pydata.org/docs/reference/api/…
  • @ifly6 没有变化。相同的行为。请指教。
  • 你必须明确指定它们

标签: python-3.x pandas dataframe dtype


【解决方案1】:

对我有用的唯一方法是将其保存为 csv 并再次加载的“解决方法”。 Pandas read_csv 推断列的类型并为我工作。 很高兴知道我是否可以在没有这种解决方法的情况下解决它。

【讨论】:

    【解决方案2】:

    首先检查数据框每列包含哪些数据类型。

    print(df.dtypes)
    

    然后更改所有列值类型。

    df['A'] = df['A'].astype(bool)
    df['B'] = df['B'].astype(bool)
    df['C'] = df['C'].astype(str)
    df['D'] = df['D'].astype(int)
    df['E'] = df['E'].astype(int)
    

    然后检查值是否正确转换。

    print(df.dtypes)
    

    这应该可行。如果没有,请告诉我。

    Reference

    【讨论】:

    • 抱歉,我所有的 dtype 都是对象,所以很抱歉,您的回答对我没有帮助。我已经检查过了。 @richard-scholtens
    • 没问题。祝你好运!
    猜你喜欢
    • 1970-01-01
    • 2022-01-20
    • 2015-11-07
    • 1970-01-01
    • 2015-06-11
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多