簡體   English   中英

如何使用 Python 僅讀取 CSV 文件的標題列?

[英]How can I read only the header column of a CSV file using Python?

我正在尋找一種方法來讀取大量大型 CSV 文件的標題行。

使用 Pandas,我為每個 csv 文件提供了這種方法:

>>> df = pd.read_csv(PATH_TO_CSV)
>>> df.columns

我可以只用 csv 模塊來做到這一點:

>>> reader = csv.DictReader(open(PATH_TO_CSV))
>>> reader.fieldnames

這些問題是每個 CSV 文件的大小為 500MB+,並且讀取每個文件的整個文件似乎只是為了拉標題行是一種巨大的浪費。

我所有這一切的最終目標是提取唯一的列名。 一旦我擁有每個文件中的列標題列表,我就可以做到這一點。

如何快速僅提取 CSV 文件的標題行?

擴展Jeff 給出答案現在可以在不實際讀取任何行的情況下使用pandas

In [1]: import pandas as pd
In [2]: import numpy as np
In [3]: pd.DataFrame(np.random.randn(10, 4), columns=list('abcd')).to_csv('test.csv', mode='w')

In [4]: pd.read_csv('test.csv', index_col=0, nrows=0).columns.tolist()
Out[4]: ['a', 'b', 'c', 'd']

pandas的優勢在於它可以更優雅地處理 CSV 編碼。

我參加聚會可能有點晚了,但這是僅使用 Python 標准庫的一種方法。 在處理文本數據時,我更喜歡使用 Python 3,因為 unicode。 所以這與您最初的建議非常接近,除了我只閱讀一行而不是整個文件。

import csv    

with open(fpath, 'r') as infile:
    reader = csv.DictReader(infile)
    fieldnames = reader.fieldnames

希望這有幫助!

這是一種方法。 你得到 1 行。

In [9]: DataFrame(np.random.randn(10,4),columns=list('abcd')).to_csv('test.csv',mode='w')

In [10]: read_csv('test.csv',index_col=0,nrows=1)
Out[10]: 
          a         b         c         d
0  0.365453  0.633631 -1.917368 -1.996505

我以iglob為例來搜索.csv文件,但一種方法是使用一組,然后根據需要進行調整,例如:

import csv
from glob import iglob

unique_headers = set()
for filename in iglob('*.csv'):
    with open(filename, 'rb') as fin:
        csvin = csv.reader(fin)
        unique_headers.update(next(csvin, []))

關於什么:

pandas.read_csv(PATH_TO_CSV, nrows=1).columns

這將僅讀取第一行並返回找到的列。

你錯過了 read_csv 的nrows=1參數

>>> df= pd.read_csv(PATH_TO_CSV, nrows=1)
>>> df.columns

這取決於標題的用途,如果您只需要標題用於比較目的(我的情況),此代碼將簡單且超快,它將整個標題作為一個字符串讀取。 您可以根據需要將所有收集的字符串一起轉換:

for filename in glob.glob(files_path+"\*.csv"):
    with open(filename) as f:
        first_line = f.readline()
import pandas as pd

get_col = list(pd.read_csv("first_test_pipe.csv",sep="|",nrows=1).columns)
print(get_col)

你可以很容易地使用它:

df = pd.read_csv("path.csv", skiprows=0, nrows=2)
df.columns.to_list()

在這種情況下,您只能讀取很少的行來獲取標題

如果您只對標題感興趣並且想使用 pandas,那么除了 csv 文件名之外,您需要傳遞的唯一額外內容是“nrows=0”:

headers = pd.read_csv("test.csv", nrows=0)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM