0

我有一些非常大的 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)in 循环似乎工作正常,但是当我运行 df3 时,我得到以下输出

['\x00\x003\x004\x00\x006\x006\x005\x00,\x002\x001\x007\x006\x000\x00']

有人可以帮忙吗?

先感谢您!

4

2 回答 2

2

我建议执行以下操作:

如果数字中有“,”,则将其替换为“。” 但摆脱','之前。因此,您可以将 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
于 2021-07-07T14:56:47.977 回答
0

你可以试试这个:

>>> 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
于 2021-07-07T14:54:41.157 回答