【问题标题】:Assign data type for each column in pandas DataFrame - Python为 pandas DataFrame 中的每一列分配数据类型 - Python
【发布时间】:2018-02-09 07:04:59
【问题描述】:

我想更改可以在空 Pandas 数据框中输入的数据类型。所以我尝试了以下方法,但它不起作用。 有人可以给我一个提示如何解决这个问题吗?

columns=['A', 'B', 'C', 'D', 'E','F']


df = pd.DataFrame(columns=columns)

>>> df
Empty DataFrame
Columns: [A, B, C, D, E, F]
Index: []

df[[0]]=df[[0]].astype(str)
df[[1]]=df[[1]].astype(str)
df[[2]]=df[[2]].astype(int)
df.iloc[:,3:6]=df.iloc[:,3:6].astype(float)

【问题讨论】:

  • 在您的最小示例中,您指定了一些列列表,然后生成的 df 不显示这些列,为什么这对空 df 很重要?将数据分配给这些列后,dtype 将发生变化
  • 我认为只有像df = pd.DataFrame(columns=columns, dtype=str)这样的构造函数可以在所有列中设置相同的dtype
  • 是的,它会起作用的。 The documentation describes it 所以df = pd.DataFrame(columns=columns, dtype=str) 将给df.dtypes 作为objects

标签: python pandas type-conversion


【解决方案1】:

默认情况下,您的所有列都是“对象”类型,因此您可能不需要强制列为字符串类型。对于其他列类型,这样的方法可能有用吗?

df[['C']] = df[['C']].apply(pd.to_numeric)

【讨论】:

    【解决方案2】:

    你想用你想要的类型构建一个系列或字典然后使用astype

    columns = list('ABCDEF')
    df = pd.DataFrame(columns=columns)
    
    dtypes = {k: str for k in columns[:2]}
    dtypes.update({columns[2]: int})
    dtypes.update({k: float for k in columns[3:]})
    
    df = df.astype(dtypes)
    
    df.dtypes
    
    A     object
    B     object
    C      int64
    D    float64
    E    float64
    F    float64
    dtype: object
    

    【讨论】:

    • 如果你有任何浮点 NaN,使用 astype(str) 会将它们的值转换为“nan”
    【解决方案3】:

    我最初也遇到过这个问题,但我找到了解决方案:

    1. 在 Python 中将数据框列转换为列表数据结构。
    2. 然后在导入numpy包后将列表转换为系列。
    3. 使用astype() 函数转换为所需的数据类型。

    代码:

    list = list(data['unknown'])
    series = pd.Series(list)
    seriesOfTypeBool = g.astype(np.bool)
    data['unknown'] = seriesOfTypeBool` <br>
    

    还有简化版:

    data['Action'] = pd.Series(list(data['Action'])).astype(np.bool)
    

    【讨论】:

      猜你喜欢
      • 2016-09-19
      • 1970-01-01
      • 1970-01-01
      • 2020-12-18
      • 2020-03-19
      • 2019-02-15
      • 2021-06-04
      • 2017-08-11
      • 1970-01-01
      相关资源
      最近更新 更多