python - 查找包含子字符串的列并替换它 - Pandas
问题描述
我对数据框中的特殊字符有疑问。例如
ID license value1 value2 value3 ...
2 a "5,120.000" 15% 45 ...
1 b "3,246.440" 10% 65 ...
4 b "1,890.220" 50% 10 ...
5 c "2,005.240" 32% 12 ...
问题是我有这么多列,大约 150 列,如果我逐列逐列并单独替换值是不行的。所以,我需要替换任何特殊字符并将数字(此时 - 字符串列)转换为浮动。
我尝试过这样的事情:
def drop_percent(data):
for el in data.columns:
if data[el].astype(str).str.contains('%').any():
data[el] = data[el].str.strip("%").astype(float)
return data
def drop_commas(data):
for el in data.columns:
if data[el].astype(str).str.contains(',').any():
mcd[el] = mcd[el].str.replace(',','')
if data[el].astype(str).str.contains('"').any():
mcd[el] = mcd[el].str.replace('"', '')
mcd[el] = mcd[el].astype(float)
return data
我的错误是:
AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
解决方案
这是使用列表理解和从列中删除所有非特殊字符的简单直接的方法str.replace
:
(pd.concat([df[col].astype(str).str.replace(r'\W+', '', regex=True)
for col in df.columns], 1))
license value1 value2 value3
2 a 5120000 15 45
1 b 3246440 10 65
4 b 1890220 50 10
5 c 2005240 32 12
推荐阅读
- tags - 使用 Angular 6.1 的页面视图源上不显示元标记
- c++ - 代码崩溃但在使用 Valgrind 运行时可以工作,但 Valgrind 报告错误
- javascript - 修改原语的完整方法列表是什么?
- initialization - Modelica:初始打印时只打印一次
- c++ - 如何找到所有连续子序列的差异?
- c# - 在这种情况下,不可变变量线程安全吗?
- python - 函数调用后不输出数据
- php - wordpress循环中的功能减慢页面速度
- build - 颤动的iOS构建失败(ld:找不到-lPods-Runner的库)
- haskell - 如何在 Elm(或 Haskell)中的函数之间共享数据