问题描述
我有一些非常大的 txt 文件 (> 2 gb),其中数据质量不佳。 在某些列(应该是整数)中,对于低于 1000.00 的值,'.'用作小数点(例如 473.71886),但对于 1000.00 以上的值,则形式类似于 7.541,72419。所以','用作小数点,'.'用作小数点。用于千位分隔符。
我已经使用 pd.read_csv 和以下命令读取了文本文件
df = pd.read_csv('mseg.txt',delimiter=("#|#"),nrows=(1000),engine = 'python')
我尝试构建要使用的正则表达式,但它不起作用
pattern = "[0-9]+[\.][0-9]+[,][0-9]+"
我正在考虑使用下面的代码来纠正上述问题,但它不起作用。 (在下面的代码中我用作 pattern2 = ","
来测试代码)
for i in df.iloc[:,-5]:
df3 = []
if re.search(pattern2,i):
k= i.replace(".","")
print(k)
df3.append(k)
else:
df3.append(k)
return dfe3
循环中的 print(k)
似乎工作正常,但是当我运行 df3 时,我得到以下输出
['\x00 \x003\x004\x00\x006\x006\x005\x00,\x002\x001\x007\x006\x000\x00']
有人可以帮忙吗?
先谢谢你!
解决方法
我建议执行以下操作:
如果数字中有“,”,则将其替换为“.”但是去掉之前的','。 因此,您可以将 1.234,567 更改为 1234,567,然后更改为 1234.567。 那么你所有的数字都应该采用相同的格式。
df3 = []
for index,i in df.iloc[:,-5]:
if ',' in i:
i= i.replace(".","").replace(',','.')
df3[index] = i
,
你可以试试这个:
>>> df
0
0 473.71886
1 7.541,72419
>>> df[0].str.split(r'[^\d]') \
.apply(lambda x: f"{''.join(x[:-1])}.{x[-1]}")
0 473.75410
1 71886.72419
dtype: float64