3 回答

TA貢獻1813條經驗 獲得超2個贊
您的分隔符是一個空格 ( ' '
),每行末尾都有一個額外的空格。pandas 將在最后一個空格處拆分,并且由于該空格后沒有任何內容,因此創建一個包含所有NaN
值的列。
理想情況下,您應該修復文本文件的生成方式并刪除每行末尾的額外分隔符。如果工作量太大或不可能,一個簡單的解決方案是讀入所有內容并忽略最后一列:
df = pd.read_csv('cleaned_coords.txt', sep=' ', header=None).iloc[:, :-1]
如果您不確定事先是否存在問題,您可以閱讀所有內容并刪除完全無用的NaN
列:
df = pd.read_csv('cleaned_coords.txt', sep=' ', header=None).dropna(how='all', axis=1)
*pd.read_csv
已經返回一個DataFrame
. 無需再次調用 pd.DataFrame。

TA貢獻1852條經驗 獲得超7個贊
在讀取為 csv 后只需刪除 NaN cols。但是如果你出于某種原因想先清理文本文件,你可以這樣做:
with open("thermo_.txt", "r") as f:
? ? a = [i.rstrip() for i in f]? # removes extra ' ' spaces from right hand side
a = [i.split(' ') for i in a]? ? # splits list into list of lists by line
df = pd.DataFrame(a).set_index(0)

TA貢獻1868條經驗 獲得超4個贊
解決這個問題的一種方法是在正則表達式中使用“積極的前瞻”。這表示在后跟任何字符的任何空格上分隔。因此,行末尾的空格后面沒有字符,因此不要分開以避免創建空列。
df?=?pd.read_csv(stxt,?sep="\s(?=.)",?header=None)
MVCE:
from io import StringIO
import pandas as pd
stxt = StringIO("""1 1 8.40871 3.96667 1.62792 -0.0242897 0.0217222 -0.0202916?
2 2 8.01328 4.85028 1.64181 0.00616535 -2.50788e-06 0.00506225?
3 1 7.38052 4.83557 0.908616 0.00891202 -0.00286839 -0.0224226?
4 1 4.80607 4.99439 8.90799 0.02527 0.0136878 0.00715371?
5 2 4.7497 4.77019 7.96784 -0.00495311 -0.0033607 0.00586672?
6 1 5.59201 5.07857 7.60231 0.00295874 -0.0148703 -0.0234462?
7 1 7.20491 1.66118 13.9242 -0.0267906 -0.0263551 -0.0270223?
8 2 8.00486 1.60311 14.4665 -0.00277453 0.00193951 0.00670056?
9 1 8.718 1.48953 13.8209 0.00832425 -0.0201998 -0.00663991?
10 1 1.28567 5.5535 11.6424 0.00428372 -0.00289222 -0.0182445?
11 2 1.56894 4.74096 11.1987 0.00614187 0.00526615 0.000498092?
12 1 2.40718 4.98336 10.7782 -0.0155901 -0.0217939 0.00378399?
13 1 15.325 7.97006 8.07627 0.010599 0.0244346 -0.0146411 """)
df = pd.read_csv(stxt, sep="\s(?=.)", header=None, engine='python')
# Note if you just did sep=" ", you get the 9th column 8 with NaNs.
df
輸出:
? ? ?0? 1? ? ? ? ?2? ? ? ? 3? ? ? ? ? 4? ? ? ? ?5? ? ? ? ?6? ? ? ? ?7
0? ? 1? 1? ?8.40871? 3.96667? ?1.627920 -0.024290? 0.021722 -0.020292
1? ? 2? 2? ?8.01328? 4.85028? ?1.641810? 0.006165 -0.000003? 0.005062
2? ? 3? 1? ?7.38052? 4.83557? ?0.908616? 0.008912 -0.002868 -0.022423
3? ? 4? 1? ?4.80607? 4.99439? ?8.907990? 0.025270? 0.013688? 0.007154
4? ? 5? 2? ?4.74970? 4.77019? ?7.967840 -0.004953 -0.003361? 0.005867
5? ? 6? 1? ?5.59201? 5.07857? ?7.602310? 0.002959 -0.014870 -0.023446
6? ? 7? 1? ?7.20491? 1.66118? 13.924200 -0.026791 -0.026355 -0.027022
7? ? 8? 2? ?8.00486? 1.60311? 14.466500 -0.002775? 0.001940? 0.006701
8? ? 9? 1? ?8.71800? 1.48953? 13.820900? 0.008324 -0.020200 -0.006640
9? ?10? 1? ?1.28567? 5.55350? 11.642400? 0.004284 -0.002892 -0.018245
10? 11? 2? ?1.56894? 4.74096? 11.198700? 0.006142? 0.005266? 0.000498
11? 12? 1? ?2.40718? 4.98336? 10.778200 -0.015590 -0.021794? 0.003784
12? 13? 1? 15.32500? 7.97006? ?8.076270? 0.010599? 0.024435 -0.014641
添加回答
舉報