我現在想知道我的 csv 檔案包含的標題數量(在 0 到 ~50 之間)。該檔案本身很大(因此不閱讀完整的檔案是強制性的)并且包含數字資料。我知道 csv.Sniffer 有一個 has_header() 函式,但它只能檢測到 1 個標頭。我的一個想法是遞回呼叫 has_header 函式(假設它檢測到第一個標頭),然后計算遞回。不過我敢肯定,有一種更聰明的方法。
谷歌搜索有點痛苦,因為無論你搜索什么,如果它在某個時候包含“count”和“csv”,你會得到所有的“count rows in csv”結果:D
提前致謝!
uj5u.com熱心網友回復:
用于re.search搜索連續有 2 個或更多字母的行。使用二而不是一,不計為標題科學記數法(例如,1.0e5)。
# In the shell, create a test file:
# echo "foo,bar\nbaz,bletch\n1e4,2.0\n2E5,2" > in_file.csv
import re
num_header_lines = 0
for line in open('in_file.csv'):
if re.search('[A-Za-z]{2,}', line):
# count the header here
num_header_lines = 1
else:
break
print(num_header_lines)
# 2
uj5u.com熱心網友回復:
好吧,我認為您可以獲取 csv 檔案的第一行,然后將其拆分為“,”。這將回傳一個包含所有標題的陣列。現在你可以用 len 來計算它們。
uj5u.com熱心網友回復:
這是用于查找與特定標準匹配的第一行的草圖。出于演示目的,我使用標準“有空欄位”:
import csv
with open(filename, "r", encoding="utf-8") as handle:
for lineno, fields in enumerate(csv.reader(handle), 1):
if "" in fields:
print(lineno-1)
break
您將對其進行更新以查找對您的資料有意義的內容,例如“第三和八個欄位包含數字”:
try:
float(fields[2])
float(fields[7])
print(lineno-1)
break
except ValueError:
continue
(注意串列fields是如何從零開始索引的,所以第一個欄位是fields[0],第三個是fields[2]),或者可能是一個更復雜的模型,其中第一行不包含空欄位,連續的行包含越來越多的空欄位,然后是第資料行包含較少的空欄位:
maxempty = 0
for lineno, fields in numerate(csv.reader(handle), 1):
empty = fields.count("")
if empty > maxempty:
maxempty = empty
elif empty < maxempty:
print(lineno-1)
break
我們只是列印最后一個標題行的行號,因為您的問題詢問有多少。在某些情況下,列印或回傳第一條資料線的編號可能更有意義。
這段代碼根本不使用 Pandas,只是csvPython 標準庫中的常規模塊。當您點擊時它會停止讀取,break因此之后有多少行對性能無關緊要(盡管如果您需要進行試驗或除錯,可能會創建一個較小的檔案,例如,您的真實檔案的前 200 行) .
uj5u.com熱心網友回復:
嘗試這個:
import pandas as pd
df = pd.read_csv('your_file.csv', index_col=0)
num_rows, num_cols = df.shape
由于我看到您擔心檔案大小,因此將檔案分成塊會起作用:
chunk_size = 10000
df = pd.read_csv(in_path,sep=separator,chunksize=chunk_size,
low_memory=False)
我認為如果您逐塊讀取 df 塊,您可能會獲得可變數量的行,但如果您只對列數感興趣,這將很容易作業。
您還可以查看dask.dataframe
uj5u.com熱心網友回復:
這只讀取 csv 的第一行
import csv
with open('ornek.csv', newline='') as f:
reader = csv.reader(f)
row1 = next(reader)
sizeOfHeader = len(row1)
uj5u.com熱心網友回復:
只需閱讀第一行read_csv():
pd.read_csv('your.csv', nrows=1).columns.size
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492554.html
上一篇:按上一列計算資料并創建新列
