仅将数据框中的特定列转换为数字
Converting only specific columns in dataframe to numeric
我目前有一个数据框,其中包含 n 个数字值列和三列日期时间和字符串值。我想将所有列(但三列除外)转换为数值,但不确定最佳方法是什么。下面是一个示例数据框(已简化):
df2 = pd.DataFrame(np.array([[1, '5-4-2016', 10], [1,'5-5-2016', 5],[2, '5-
4-2016', 10], [2, '5-5-2016', 7], [5, '5-4-2016', 8]]), columns= ['ID',
'Date', 'Number'])
我尝试使用(如下)之类的东西但没有成功。
exclude = ['Date']
df = df.drop(exclude, 1).apply(pd.to_numeric,
errors='coerce').combine_first(df)
预期输出:(本质上,字段 'ID' 和 'Number' 的数据类型更改为浮点数,而 'Date' 保持不变)
ID Date Number
0 1.0 5-4-2016 10.0
1 1.0 5-5-2016 5.0
2 2.0 5-4-2016 10.0
3 2.0 5-5-2016 7.0
4 5.0 5-4-2016 8.0
你试过 Series.astype() 了吗?
df['ID'] = df['ID'].astype(float)
df['Number'] = df['Number'].astype(float)
或除日期之外的所有列:
for col in [x for x in df.columns if x != 'Date']:
df[col] = df[col].astype(float)
或
df[[x for x in df.columns if x != 'Date']].transform(lambda x: x.astype(float), axis=1)
如果您希望它变为浮动,您需要使用选项 downcast='float'
调用 to_numeric
。否则,它将是 int
。您还需要重新加入原始 df2
的 non-converted 列
df2[exclude].join(df2.drop(exclude, 1).apply(pd.to_numeric, downcast='float', errors='coerce'))
Out[1815]:
Date ID Number
0 5-4-2016 1.0 10.0
1 5-5-2016 1.0 5.0
2 5-4-2016 2.0 10.0
3 5-5-2016 2.0 7.0
4 5-4-2016 5.0 8.0
我目前有一个数据框,其中包含 n 个数字值列和三列日期时间和字符串值。我想将所有列(但三列除外)转换为数值,但不确定最佳方法是什么。下面是一个示例数据框(已简化):
df2 = pd.DataFrame(np.array([[1, '5-4-2016', 10], [1,'5-5-2016', 5],[2, '5-
4-2016', 10], [2, '5-5-2016', 7], [5, '5-4-2016', 8]]), columns= ['ID',
'Date', 'Number'])
我尝试使用(如下)之类的东西但没有成功。
exclude = ['Date']
df = df.drop(exclude, 1).apply(pd.to_numeric,
errors='coerce').combine_first(df)
预期输出:(本质上,字段 'ID' 和 'Number' 的数据类型更改为浮点数,而 'Date' 保持不变)
ID Date Number
0 1.0 5-4-2016 10.0
1 1.0 5-5-2016 5.0
2 2.0 5-4-2016 10.0
3 2.0 5-5-2016 7.0
4 5.0 5-4-2016 8.0
你试过 Series.astype() 了吗?
df['ID'] = df['ID'].astype(float)
df['Number'] = df['Number'].astype(float)
或除日期之外的所有列:
for col in [x for x in df.columns if x != 'Date']:
df[col] = df[col].astype(float)
或
df[[x for x in df.columns if x != 'Date']].transform(lambda x: x.astype(float), axis=1)
如果您希望它变为浮动,您需要使用选项 downcast='float'
调用 to_numeric
。否则,它将是 int
。您还需要重新加入原始 df2
df2[exclude].join(df2.drop(exclude, 1).apply(pd.to_numeric, downcast='float', errors='coerce'))
Out[1815]:
Date ID Number
0 5-4-2016 1.0 10.0
1 5-5-2016 1.0 5.0
2 5-4-2016 2.0 10.0
3 5-5-2016 2.0 7.0
4 5-4-2016 5.0 8.0