无法使用pandas读取.txt文件,因为它的形状很奇怪

2024-06-02 07:46:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据集,其中包含一个关于粒子的实验的信息。你可以在这里找到它(希望链接可以,如果不让我知道,我会立即删除):

http://archive.ics.uci.edu/ml/datasets/MiniBooNE+particle+identification

尝试在pandas中读取此集合时,我遇到了pandas将此txt作为一个130.064行的数据帧读取的问题,这是正确的,但只有一列。如果你检查链接中的txt文件,你会发现它的形状很奇怪,开头有空格,每列之间有2个空格。 我试过这个命令

df = pd.read_csv("path/file.txt", header = None)

而且

df = pd.read_csv("path/file.txt", sep = "  ", header = None)

其中我设置了2个空格作为分隔符。什么都不管用。在第1行中,该文件还有2个数字,仅表示我删除的行数。对于不能/不想打开链接或数据集的人,下面是一些列的图片

enter image description here

这只是其中的一部分,而不是全部数据。在最左边,窗口边缘和第一列之间有两个空格,如我所说。当使用熊猫阅读时,这就是我得到的

enter image description here

如有任何建议/帮助,将不胜感激。谢谢


编辑 我试着做了以下几件事,我认为它奏效了。首先,在从包含两个不相关数字的数据帧中删除第一行之后,我使用NumPy导入了.txt文件

df1 = np.loadtxt("path/file.txt")

出于某种原因,这起了作用,生成的数组是正确的。然后我使用命令将这个数组转换为数据帧

df = pd.DataFrame(df1)
df.columns = ['X' + str(x) for x in range(50) ]

是的,我认为它是有效的。检查下面的图片。 enter image description here

我认为这是正确的,但如果你们发现什么不对劲,请告诉我


Tags: 文件csv数据path命令txtnonepandas
2条回答

编辑

columns = ['Obs1','Obs2','Obs3','Obs4','Obs5','Obs6','Obs7','Obs8','Obs9','Obs10','Obs11','Obs12','Obs13','Obs14','Obs15','Obs16','Obs17','Obs18','Obs19','Obs20','Obs21','Obs22','Obs23','Obs24','Obs25','Obs26','Obs27','Obs28','Obs29','Obs30','Obs31','Obs32','Obs33','Obs34','Obs35','Obs36','Obs37','Obs38','Obs39','Obs40','Obs41','Obs42','Obs43','Obs44','Obs45','Obs46','Obs47','Obs48','Obs49','Obs50']    
df = pd.read_csv("path/file.txt", sep = "  ", columns=columns , skiprows=1)

您可以尝试从列表而不是txt文件创建dataframe,如下所示:

#We put all the lines in a list
data = []
with open("dataset.txt") as fp:
    lines = fp.read()
    data = lines.split('\n')

df_data= []
for item in data:
    df_data.append(item.split('  ')) #I cant see if 1 space or 2 separate the values

#df_data should be something like [[row1col1,row1col2,row1col3],[row2col1,row2col2,row3col3]]

#List to dataframe

df = pd.DataFrame(df_data)

通过内存执行此操作,因此请注意语法,希望这有帮助

相关问题 更多 >