【问题标题】:Python function to loop through columns to replace stringsPython函数遍历列以替换字符串
【发布时间】:2019-06-06 17:44:00
【问题描述】:

我是 python 新手,到目前为止,我发现这个社区非常有帮助。我已经找到了很多其他问题的答案,但我似乎无法弄清楚这一点。

我正在尝试编写一个函数来循环遍历列并替换“%”、“$”和“,”。当我通过熊猫导入 .csv 时,我有大约 80/108 列是 dtype == 对象,我需要将其转换为浮点数。

我发现我可以写了:

df['column_name'] = df['column_name].str.replace('%', '')

它成功执行并删除了 %.

不幸的是,我有很多列(108),想写一个函数来解决这个问题。我想出了下面的代码,它只会在某些列上执行并发出一个奇怪的错误:

# get column names
col_names = list(df.columns.values)

# start cleaning data
def clean_data(x):
    for i in range(11, 109, 1):
        if x[col_names[i]].dtype == object:
            x[col_names[i]] = x[col_names[i]].str.replace('%', '')
            x[col_names[i]] = x[col_names[i]].str.replace('$', '')
            x[col_names[i]] = x[col_names[i]].str.replace(',', '')

AttributeError: 'DataFrame' object has no attribute 'dtype'

即使错误停止了进程,一些列也会被清除。我似乎无法弄清楚为什么它没有清​​理所有列然后返回“dtype”错误。

我正在运行 python 3.6。

【问题讨论】:

  • @ijustlovemath 感谢您的快速回复!不幸的是,当我在不删除“$”和“%”字符的情况下转换它时,它只会变成 0。
  • @ijustlovemath 我试图让它只在作为对象的列上运行,并跳过其他浮动的列。我把它放在那里,以为我需要这样做,但回答这个问题让我想知道是否需要这样做。

标签: python-3.x function for-loop


【解决方案1】:

欢迎来到stackoverflow。 如果要对每一列都执行此操作,请使用数据框的 apply 函数,无需循环:

df = pd.DataFrame([['1$', '2%'],] * 3, columns=['A', 'B'])
def myreplace(s):
    for ch in ['%','$',',']:
        s = s.map(lambda x: x.replace(ch, ''))
    return s
df = df.apply(myreplace)

print(df)

如果你想对某些列做,使用dataserie的map函数,不需要循环:

df = pd.DataFrame([['1$', '2%'],] * 3, columns=['A', 'B'])
def myreplace(s):
    for ch in ['%','$',',']:
        s = s.replace(ch, '')
    return s
df['A'] = df['A'].map(myreplace)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 2018-07-06
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    相关资源
    最近更新 更多