混合数据类型的熊猫将指数或科学数字转换为整数

时间:2020-06-22 05:32:52

标签: python pandas dataframe casting

我一直在寻找解决方案,并尝试了一些建议,但没有得到答案。 我有一列中以指数形式存在字符串和长数,并且我需要从指数值中获取完整数字以进行进一步处理。

熊猫指数科学数转换为整数。

Click here for Sample Data

它看起来像

enter image description here

import pandas as pd

# tried adding this
pd.options.display.float_format = "{:.0f}".format
df = pd.read_csv('Detail Statement.csv')

# tried converting to int by ignoring other types after commenting display.format  
df['Ref Number'] = df['Ref Number'].astype(int, errors='ignore')

# tried map
df['Ref Number'] = df['Ref Number'].map(int)

1 个答案:

答案 0 :(得分:1)

您可以定义自定义函数并使用.apply

def convert(x):
    try:
        return int(float(x))
    except Exception:
        return x

df['Ref Number'] = df['Ref Number'].apply(convert)
df['Ref Number'].iloc[0], type(df['Ref Number'].iloc[0])
'HSB345678', str

df['Ref Number'].iloc[-1] , type(df['Ref Number'].iloc[-1])
201498000000, int

如果浮点数很好,则可以将errors参数设置为coerce并使用pd.to_numeric,然后使用.fillna来填充不可转换的字符串。

df['Ref Number'] = pd.to_numeric(df['Ref Number'], errors='coerce').fillna(df['Ref Number'])

df['Ref Number'].dtype
dtype('O')

df['Ref Number'].iloc[0], type(df['Ref Number'].iloc[0])
'HSB345678', str

df['Ref Number'].iloc[-1] , type(df['Ref Number'].iloc[-1])
201498000000.0, float