我需要一个具有所有dtype的数据帧,这些类型是np.number
的子集。 to_numeric函数允许我对具有某些数据的数据帧执行此操作。作为一个极端的案例,我正在用一个空的数据框对其进行测试,但似乎无法正常工作。
import numpy as np
import pandas as pd
df = pd.DataFrame(columns=['col1', 'col2', 'col3'])
df = df.apply(pd.to_numeric, errors='coerce')
print(df.dtypes)
将输出提供给我
col1 object
col2 object
col3 object
dtype: object
我期望的地方
col1 int64
col2 int64
col3 int64
dtype: object
如果我填充数据框,则问题消失:
df = pd.DataFrame({'col1': [1, 2], 'col2': [1, 2], 'col3': [1, 2]})
df = df.apply(pd.to_numeric, errors='coerce')
print(df.dtypes)
为我提供了预期的输出。
有人可以解释这种不同的行为,并提出解决方法。除非需要,否则我不想明确检查数据框是否有数据。
我正在使用 python 3.6.1
答案 0 :(得分:1)
使用astype似乎可以实现
df=df.astype("int64")
您还可以为每列明确分配类型
df = pd.DataFrame({'col1':pd.Series([], dtype='int'),
'col2':pd.Series([], dtype='int'),
'col3':pd.Series([], dtype='int')})
print(df.dtypes)
col1 int64
col2 int64
col3 int64
dtype: object