如何在 read.csv 期间使用 pandas 避免“未命名”列?

How to avoid `Unnamed` columns during read.csv using pandas?

我有 20-30 个 csv 文件要读取。

所以,我尝试下面的代码

pat_dir = ['file*.csv']
files_grabbed = []
for files in pat_dir:
    files_grabbed.extend(glob.glob(files))
for f in files_grabbed:
    df = pd.read_csv(f, sep=",",low_memory=False)
    print(f)
    print(df.columns)

打印它们会得到如下所示的输出

file1.csv
Index(['Date', 'Code', 'Test', 'value', 'unit', 'TextualResults',
       'subject_id', 'class_id', 'Unnamed: 8',
       'Unnamed: 9', 'Unnamed: 10', 'Unnamed: 11', 'Unnamed: 12',
       'Unnamed: 13', 'Unnamed: 14', 'Unnamed: 15', 'Unnamed: 16',
       'Unnamed: 17', 'Unnamed: 18', 'Unnamed: 19', 'Unnamed: 20',
       'Unnamed: 21', 'Unnamed: 22', 'Unnamed: 23', 'Unnamed: 24',
       'Unnamed: 25', 'Unnamed: 26', 'Unnamed: 27', 'Unnamed: 28',
       'Unnamed: 29', 'Unnamed: 30', 'Unnamed: 31', 'Unnamed: 32',
       'Unnamed: 33', 'Unnamed: 34', 'Unnamed: 35', 'Unnamed: 36',
       'Unnamed: 37', 'Unnamed: 38', 'Unnamed: 39', 'Unnamed: 40',
       'Unnamed: 41', 'Unnamed: 42', 'Unnamed: 43', 'Unnamed: 44',
       'Unnamed: 45', 'Unnamed: 46', 'Unnamed: 47', 'Unnamed: 48',
       'Unnamed: 49', 'Unnamed: 50'],

虽然我可以使用下面的代码

在read.csv之后避免unnamed
df = df.loc[:, ~df.columns.str.contains('^Unnamed')]

如何避免在 read.csv 操作期间阅读那些 unnamed 列?

请注意,我事先不知道列名。所以,我无法将 column names 定义为 read.csv。因为每个文件可以有不同的列名

所以,有什么办法可以在 read.csv 操作期间删除它们,因为我有 30 个文件,这会导致 glob 操作期间出现问题?

如何在读取 csv 文件时删除 Unnamed 列?

Pandas read_csv 方法接受一个名为 usecols 的可选关键字参数,它用于 select csv 文件中的列子集。这个参数的有趣之处在于它可以接受一个可调用函数,然后根据列名和[=29=计算这个可调用函数 ] 只有可调用函数计算结果为 True.

的列名称

以下是如何在示例中传递可调用函数以防止首先读取 Unnamed 列。

for file in files_grabbed:
    df = pd.read_csv(file, low_memory=False, 
                     usecols=lambda c: not c.startswith('Unnamed:'))

pd.read_csv('file.csv', index_col=0)