在pandas DataFrame中为每列分配数据类型 - Python

5

我希望更改在空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将会改变。 - EdChum
我认为只有通过构造函数设置相同的数据类型,例如 df = pd.DataFrame(columns=columns, dtype=str),才能在所有列中设置相同的数据类型。 - jezrael
是的,它可以工作。文档描述了它,因此df = pd.DataFrame(columns=columns, dtype=str)将会给出df.dtypesobjects - jkhadka
3个回答

5
你想要构建一个包含所需类型的系列或字典,然后使用 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"的值。 - StingyJack

0

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

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

0

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

  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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接