从文本文件中的数字中删除逗号

时间:2019-04-03 18:25:46

标签: python pandas

我正在尝试从正在读取的文本文件中的数字中删除逗号。我无法这样做。

这就是我读取数据的方式:

def fileLoader(file):
    df = pd.DataFrame()
    with open(file) as fin:
        chk_lst = next(fin).split()
        is_h = not any(v[0].isdecimal() for v in chk_lst)
        df = pd.concat([df, pd.read_csv(file, sep='\s+', header=None, skiprows=(0, 1)[is_h])], axis=0, ignore_index=True)
    return df

当前代码输出(错误)显示为:

ValueError: could not convert string to float: '3,498,300153,90023,90066,30079,60042,20011,60083,771131,000497,400715,00085,40028,40081,500153,900454,00024,5008,0003,000'

TypeError: Could not convert 3,498,300153,90023,90066,30079,60042,20011,60083,771131,000497,400715,00085,40028,40081,500153,900454,00024,5008,0003,000 to numeric

我尝试读取的文件示例如下:

TEST    3,498,300   2.600
ABC     153,900     2.500
CBA     23,900      2.250
NYT     66,300      2.250

我的最终结果应如下:

TEST    3498300     2.600
ABC     153900      2.500
CBA     23900       2.250
NYT     66300       2.250

4 个答案:

答案 0 :(得分:1)

我假设您正在阅读的文本文件是csv文件。您可以做的就是使用pd.read_csv中内置的数千个参数。

df = pd.concat([df, pd.read_csv(file, sep='\s+', header=None, skiprows=(0, 1)[is_h])], 
                axis=0, 
                ignore_index=True, 
                thousands=',')

答案 1 :(得分:0)

您可以简单地将逗号替换为“”(空字符串)

example = "TEST    3,498,300   2.600"
example  = example.replace(",", "")
print(a)

上面的代码会打印

TEST    3498300   2.600

答案 2 :(得分:0)

使用以下内容(请注意,我暂时未使用标头)

df = pd.read_csv('data.txt', sep='\s+', header=None, thousands=',')

print(df)
      0        1     2
0  TEST  3498300  2.60
1   ABC   153900  2.50
2   CBA    23900  2.25
3   NYT    66300  2.25

答案 3 :(得分:0)

类似于@ Thimo1,从您提供的示例开始:

import pandas as pd

df = pd.DataFrame([['TEST',    '3,498,300',   "2.600"],
                  ['ABC',     '153,900',     '2.500'],
                  ['CBA',     '23,900',      '2.250'],
                  ['NYT',     '66,300',      '2.250']])

以大熊猫为中心的方式是:

df.iloc[:,1] = df.iloc[:,1].str.replace(',','')

这将为您提供:

Out[29]: 
      0        1      2
0  TEST  3498300  2.600
1   ABC   153900  2.500
2   CBA    23900  2.250
3   NYT    66300  2.250

我认为尽管您更喜欢后两列不是字符串,所以您可以:

df.iloc[:,1] = df.iloc[:,1].astype(int)
df.iloc[:,2] = df.iloc[:,2].astype(float)