我有一個具有以下結構的txt檔案:
1:0.84722,0.52855;0.65268,0.24792;0.66525,0.46562
2:0.84722,0.52855;0.65231,0.24513;0.66482,0.46548
3:0.84722,0.52855;0.65197,0.24387;0.66467,0.46537
帶冒號的第一個數字是索引,打開檔案的時候不知道怎么表示。確實,我想抹掉它。然后資料用逗號和分號分隔,我希望每個數字都在不同的列中,無論分隔符是逗號還是分號。我怎么能做到?
uj5u.com熱心網友回復:
使用以下命令使用pd.read_csv加載 csv :
import pandas as pd
df = pd.read_csv("data.csv", # the file path, change it to your filename
sep="[,;:]", # the separator use a regular expression
engine="python", # need this to use regular expression as sep
usecols=range(1, 7), # use columns from [1, 7)
header=None # no header
)
print(df)
輸出
1 2 3 4 5 6
0 0.84722 0.52855 0.65268 0.24792 0.66525 0.46562
1 0.84722 0.52855 0.65231 0.24513 0.66482 0.46548
2 0.84722 0.52855 0.65197 0.24387 0.66467 0.46537
注意
一旦加載檔案,我建議將其保存(使用to_csv)為正確的csv 檔案。
uj5u.com熱心網友回復:
由于您已經在使用 pandas.read_csv,只需查看它的引數檔案sep:
要使用的分隔符。如果 sep 為 None,則 C 引擎無法自動檢測分隔符,但 Python 決議引擎可以,這意味著 Python 的內置嗅探器工具 csv.Sniffer 將使用后者并自動檢測分隔符。此外,超過 1 個字符且與 '\s ' 不同的分隔符將被解釋為正則運算式,也會強制使用 Python 決議引擎。請注意,正則運算式分隔符容易忽略參考的資料。正則運算式示例:'\r\t'。
因此,在您的情況下,只需呼叫即可解決問題pandas.read_csv(..., sep='[,;:]')。
uj5u.com熱心網友回復:
首先將其作為常規文本加載(無 .csv 決議器)。洗掉所有不需要的文本,列......用分號替換常規逗號。
要洗掉第一個數字,您可以將行拆分:并僅保留第二部分。
要替換其余部分,請使用replace(",", ";").
現在您有一個不錯的 .csv,您可以立即讀取和決議它。
uj5u.com熱心網友回復:
對于使用多個分隔符,您可以傳遞這樣的regex模式:|,|;,基本上說明其中的任何一個。
對于不使用第一列 - 您可以指定列 usecols
該engine="python"規范是可選的,因為超過 1 個字符的分隔符將強制使用 python 引擎。
x = '''1:0.84722,0.52855;0.65268,0.24792;0.66525,0.46562
2:0.84722,0.52855;0.65231,0.24513;0.66482,0.46548
3:0.84722,0.52855;0.65197,0.24387;0.66467,0.46537'''
xf = io.StringIO(x)
df = pd.read_csv(xf, sep=":|,|;", engine='python', header=None, usecols=list(range(1, 7)))
print(df)
# 1 2 3 4 5 6
#0 0.84722 0.52855 0.65268 0.24792 0.66525 0.46562
#1 0.84722 0.52855 0.65231 0.24513 0.66482 0.46548
#2 0.84722 0.52855 0.65197 0.24387 0.66467 0.46537
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/321816.html
