簡體   English   中英

如何使用熊貓在最后一個字段中存在分隔符的情況下讀取CSV文件?

[英]How to use Pandas to read CSV file with delimiter existing in the last field?

我有以下格式的原始數據:

JobID,Publish,Expire,TitleAndDetail
7428,17/12/2006 2:00:00 PM,28/01/2007 2:00:00 PM,Project Engineer - Mechanical      Looking,.....,....
7429,9/03/2006 2:00:00 PM,27/02/2007 2:00:00 PM,Supply Teacher      The job is,.....,.....

如您所見,定界符是逗號,但是最后一列是其中包含逗號的文本塊。 我正在使用熊貓的read_csv函數讀取此CSV文件。 但是,在熊貓數據框中,每行第四個逗號之后的文本部分會丟失。

raw_data = pd.read_csv(r"/ABC/JobDetails.csv",
                       names=['JobID', 'Publish', 'Expire', 'TitleAndDetail'],
                       header=None
                       )

如果使用string.split()函數,則可以指定maxsplit參數,即使有很多逗號,該參數也可以將所有內容保留在最后一列中。 熊貓有類似的功能嗎?

因此,您可以嘗試以下方法:

raw_data = pd.read_csv(r"/ABC/JobDetails.csv",
                       squeeze=True,
                       sep="\a"
                       )

這應該通過忽略“,”

然后,您可以執行以下操作:

df = raw_data.str.split(",", n=4, expand=True)
df.columns = ['JobID', 'Publish', 'Expire', 'TitleAndDetail']

那應該分成4列並重命名

您可以通過以下方式進行操作:

with open("file.csv", "r") as fp:
    reader = csv.reader(fp, delimiter=",")
    rows = [x[:3] + [','.join(x[3:])] for x in reader]
    df = pd.DataFrame(rows)
    df.columns = df.iloc[0]
    df = df.reindex(df.index.drop(0))
    print df

手動讀取文件,然后創建數據框:

rows = []

with open('somefile.csv') as f:
  keys = next(f).split(',')
  for line in f:
     rows.append(dict(zip(keys, line.split(',', 3))))

df = pd.DataFrame(rows)

.split一個可選參數來限制它在定界符上分割的次數。 傳遞3表示它會忽略最后一個字段中的逗號:

>>> s.split(',', 3)
['7428',
 '17/12/2006 2:00:00 PM',
 '28/01/2007 2:00:00 PM',
 'Project Engineer - Mechanical      Looking,.....,....']

接下來,我們使用標題行中的鍵和數據行中的值創建一個字典:

>>> f = 'JobID,Publish,Expire,TitleAndDetail'.split(',')
>>> dict(zip(f, s.split(',', 3)))
{'JobID': '7428',
 'Publish': '17/12/2006 2:00:00 PM',
 'Expire': '28/01/2007 2:00:00 PM',
 'TitleAndDetail': 'Project Engineer - Mechanical      Looking,.....,....'}

最后,我們列出這些字典( rows )的列表,並將其作為參數傳遞來創建數據框對象。

暫無
暫無

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

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