【问题标题】:pandas from mix data type convert exponential or scientific numbers to integers来自 mix 数据类型的 pandas 将指数或科学数字转换为整数
【发布时间】:2020-06-22 05:32:52
【问题描述】:

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

将指数科学数字转换为整数。

Click here for Sample Data

它看起来像

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)

【问题讨论】:

标签: python pandas dataframe casting


【解决方案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

如果浮点数没问题,那么您可以使用pd.to_numeric 并将errors 参数设置为coerce,然后使用.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

【讨论】:

  • 当我添加 df.to_csv('output1.csv') 时输出与输入相同
猜你喜欢
  • 2018-09-24
  • 1970-01-01
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-23
  • 2021-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多