亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

熊貓數據框中不存在的列

熊貓數據框中不存在的列

MM們 2023-06-20 13:40:29
我有一個名為 cleaned_coords.txt 的數據文件,我正在將其提取到熊貓數據框中。這是 cleaned_coords.txt 的樣子: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 它只是數據列,一直到第 22875 行。這是我正在運行的 python 腳本:import numpy as npimport pandas as pd#data = pd.read_csv('thermo_.txt', sep=" ", header=None)data = pd.read_csv('cleaned_coords.txt', sep=" ", header=None)df = pd.DataFrame(data)print(df)這是我看到的結果:~/Desktop/Work/Simulations/water_tip3p $ python3 data_parser.py         0  1        2         3         4         5         6         7   80        1  1  8.40871   3.96667  1.627920 -0.024290  0.021722 -0.020292 NaN1        2  2  8.01328   4.85028  1.641810  0.006165 -0.000003  0.005062 NaN2        3  1  7.38052   4.83557  0.908616  0.008912 -0.002868 -0.022423 NaN3        4  1  4.80607   4.99439  8.907990  0.025270  0.013688  0.007154 NaN4        5  2  4.74970   4.77019  7.967840 -0.004953 -0.003361  0.005867 NaN...    ... ..      ...       ...       ...       ...       ...       ...  ..我的問題是,為什么我會看到帶有NaN條目的列索引 8?為什么它甚至看到列索引為 8?
查看完整描述

3 回答

?
慕姐8265434

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。


查看完整回答
反對 回復 2023-06-20
?
慕姐4208626

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)


查看完整回答
反對 回復 2023-06-20
?
MYYA

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


查看完整回答
反對 回復 2023-06-20
  • 3 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號