我有一個 txt 檔案,我讀入了一個字串串列,其中串列的每個專案都是 3 個變數的資料樣本(A,B,C)
txt = [
'001 0198110',
'0020130198110',
'0030132198110',
]
一個單獨的支持資料框,如下所示
df = pd.DataFrame(data=[[1,3,"A"],[4,3,"B"],[7,6,"C"]],columns=["Position","Lenght","Name"])
df
Position Lenght Name
0 1 3 A
1 4 3 B
2 7 6 C
指示我應該如何閱讀 txt。例如,變數 A 從每條記錄的位置 1 開始,長度為 3。
僅以第一條記錄為例
'001 0198110'
我們有A=001 B=empty->NaN C=0198110
什么是創建預期決議資料幀的有效方法(考慮到 txt 檔案是 50k 行并包含 600 個變數)
A B C
0 1 NaN 198110
1 2 13 198110
2 3 13 2198110
我可以使用 for 回圈,但也許有更好的方法
uj5u.com熱心網友回復:
嘗試pd.read_fwf:
from io import StringIO
txt = ["001 198110", "0020130198110", "0030132198110"]
df = pd.DataFrame(
data=[[1, 3, "A"], [4, 4, "B"], [7, 6, "C"]],
columns=["Position", "Lenght", "Name"],
)
x = pd.read_fwf(
StringIO("\n".join(txt)),
widths=df.Lenght,
header=None,
)
x.columns = df.Name.to_list()
print(x)
印刷:
A B C
0 1 NaN 198110
1 2 130.0 198110
2 3 132.0 198110
注意:我更改了txt串列/df資料框:
txtto的第一個值"001 198110"B到4in 的長度df
印刷:
uj5u.com熱心網友回復:
在不知道資料通常是什么樣子的情況下很難推薦優化。我的前兩種方法是:
如果有很多像 C 一樣的相似之處,您可以先考慮運行 diff,這樣您就知道可以復制的范圍,而無需重新檢查所有檔案。
如果變數之間有很多重疊,您可以按起始位置對它們進行排序并同時寫入多個,這在記憶體上也應該比隨機訪問更容易
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/529583.html
標籤:Python解析文本
