从正在读入的文本文件中删除或移除标题

我正在尝试删除或删除我正在使用 Pandas 读取的数据的标题。一个文件有一个标题,另一个没有,但我希望能够检查标题然后将其删除。


到目前为止,我已经尝试在 read_csv 函数中使用 header=None


from pathlib import Path

import pandas as pd


def _reader(fname):

    return pd.read_csv(fname, sep="\t", header=None)


folder = Path("C:\\Me\\Project1")

data = pd.concat([

    _reader(txt)

    for txt in folder.glob("*.txt")

])

我收到以下错误:TypeError: must be str, not int


我的两个文件如下所示:


文件1.txt


ISIN    AVL_QTY

BAD 90000

AAB 8550000

BAD 173688

BAD 360000

BAD 90000

BAD 810000

BAD 900000

BAD 900000

文件2.txt


TEST  543

HELLO 555

STOCK 900

CODE  785


MMTTMM
浏览 158回答 3
3回答

慕容森

首先,您需要检查第一行是否是标题。例如,您可以检查第一行的任何条目是否以数字开头,因为这对于列标题来说不是典型的。事实上,在不知道您的数千个文件的情况下,正确的标头检测方法只是猜测 - 但这并不是您代码中的真正重点。要使用标头检测,您应该使用普通循环而不是列表解析,以便您可以在每次迭代中: 1. 检查标头 2. 读取文件并将数据附加到数据帧:df = pd.DataFrame()for f in folder.glob("*.txt"):    with open(f) 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(f, sep='\s+', header=(None, 0)[is_h])], axis=1)# ISIN  AVL_QTY      0        1# 0  BAD    90000   TEST  543.775                             # 1  AAB  8550000  HELLO  555.000                           # 2  BAD   173688  STOCK  900.000                         # 3  BAD   360000   CODE  785.000                         # 4  BAD    90000    NaN      NaN                        # 5  BAD   810000    NaN      NaN                         # 6  BAD   900000    NaN      NaN                         # 7  BAD   900000    NaN      NaN                编辑:为了明智地连接行,您可以使用    df = pd.concat([df, pd.read_csv(f, sep='\s+', header=None, skiprows=(0, 1)[is_h])], axis=0, ignore_index=True)#        0        1# 0    BAD    90000                                     # 1    AAB  8550000                                      # 2    BAD   173688                                         # 3    BAD   360000                                      # 4    BAD    90000                                        # 5    BAD   810000                                        # 6    BAD   900000                                    # 7    BAD   900000                                    # 8   TEST      543                                       # 9  HELLO      555                                      # 10 STOCK      900                                       # 11  CODE      785                   

慕姐8265434

File2.txt没有标题,对吧?但在_reader你设置header为None. 将标题添加到 File2.txt,看看会发生什么。

慕雪6442864

有几种方法可以检查 csv 文件是否有标题使用 csv 库import csvwith open('example.csv', 'rb') as csvfile:    sniffer = csv.Sniffer()    has_header = sniffer.has_header(csvfile.read(2048))    csvfile.seek(0)    # ...或者如果你知道你的数据,检查第一行是否有任何数字is_header = not any(cell.isdigit() for cell in csv_table[0])或使用熊猫本身,如果您知道标题可能会被称为什么df = (pd.read_csv(filename, header=None, names=cols)      [lambda x: np.ones(len(x)).astype(bool)                 if (x.iloc[0] != cols).all()                 else np.concatenate([[False], np.ones(len(x)-1).astype(bool)])]    )当然,如果你想先用命令行预处理文件,它可能会更快......
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python