我有一個 csv 檔案。第三列可以包含奇數分隔符,如下所示:
Name,Last Name,Job,ID
John,Smith,Architect,ID2020
Taylor,Swift,Singer,Songwriter,ID2020-123
我知道第三列有時可能有問題,下一列也總是以 ID 開頭。奇怪的逗號是在歌手和詞曲作者之間。如何用讓我們說 tilda 替換奇怪的逗號,這樣就可以使用 pandas 讀取檔案而不會出錯?實際檔案有 30 列,因此可能需要使用正則運算式。謝謝你的時間。
uj5u.com熱心網友回復:
嘗試以下方法:
import pandas as pd
import csv
data = []
with open('input.csv') as f_input:
csv_input = csv.reader(f_input)
header = next(csv_input)
for row in csv_input:
data.append([*row[:2], ' '.join(row[2:-1]), row[-1]])
df = pd.DataFrame(data, columns=header)
print(df)
對于您的示例,這給出了:
Name Last Name Job ID
0 John Smith Architect ID2020
1 Taylor Swift Singer Songwriter ID2020-123
這假定不需要的逗號僅在 Job 列中。它采用NameandLast Names欄位,然后組合所有欄位,直到最后一個ID欄位。所以實際上該Job欄位可以有任意數量的逗號。
這將需要根據所有其他列的位置進行調整。
uj5u.com熱心網友回復:
IIUC,嘗試:
with open("original.csv") as infile:
rows = infile.read().splitlines()
with open("output.csv", "w") as outfile:
for row in rows:
name, lname, *rest = row.split(",")
job = "~".join(rest[:-1])
ID = rest[-1]
outfile.write(f"{name},{lname},{job},{ID}\n")
df = pd.read_csv("output.csv")
>>> df
Name Last Name Job ID
0 John Smith Architect ID2020
1 Taylor Swift Singer~Songwriter ID2020-123
uj5u.com熱心網友回復:
在 CSV 檔案中分隔列的另一種“標準”方法是使用分號。
下面的邏輯對拆分和重新加入進行了一些字串處理,使用分號進行重新加入...
with open("somefile.csv") as infile:
data = infile.read().splitlines()
with open("someotherfile.csv", "w") as outfile:
for row in data:
splitrow = row.split(",")
if len(splitrow) > 4:
splitrow[2] = f"{splitrow[2]},{splitrow.pop(3)}"
outfile.write(";".join(splitrow) '\n')
import pandas as pd
df = pd.read_csv("someotherfile.csv", sep=';')
print(df)
輸出
Name Last Name Job ID
0 John Smith Architect ID2020
1 Taylor Swift Singer,Songwriter ID2020-123
uj5u.com熱心網友回復:
IIUC 你可以這樣做,在文本檔案中逐行遍歷。“每列也以 ID 開頭”你希望它只是數字嗎?我洗掉了解決方案中每一行的 ID。
import pandas as pd
from collections import defaultdict
d = defaultdict(list)
with open("input_list.txt") as f:
next(f)
for line in f:
name, lname, *job, ID = line.strip().split(",")
d["Name"].append(name)
d["Last Name"].append(lname)
d["Job"].append(" ".join(job))
d["ID"].append(ID[2:])
df = pd.DataFrame(d)
print(df)
Name Last Name Job ID
0 John Smith Architect 2020
1 Taylor Swift Singer Songwriter 2020-123
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466582.html
上一篇:從多個CSV檔案中獲取單個列并將它們作為新列放置在資料框中
下一篇:JMeter讀取舊版csv
