【问题标题】:Pandas DataFrame Cannot Read DataPandas DataFrame 无法读取数据
【发布时间】:2016-07-30 22:25:15
【问题描述】:

我遇到了几个月前没有的 pandas 问题。我正在尝试从用户输入(使用 tkinter)中获取一组数据并将其放入 pandas 数据框中。以下是数据的样子:

1.000000    03/27/2016   13:29:26.098   1431.778943 0.092089
1.000000    03/27/2016   13:29:26.298   1432.410517 0.078570
1.000000    03/27/2016   13:29:26.498   1431.905258 0.089538
1.000000    03/27/2016   13:29:26.698   1431.399999 0.080930
5.000000    03/28/2016   00:00:00.098   1289.422164 0.392945
25.000000   03/28/2016   00:00:00.298   1289.295849 0.145016
25.000000   03/28/2016   00:00:00.498   1289.295849 0.183149
25.000000   03/28/2016   00:00:00.698   1288.790590 0.175114
26.000000   03/28/2016   00:25:16.698   1302.053644 0.162170
.....

设置了 5 列,但数据集中通常有 200,000 到 800,000 行。

这是我的代码:

import pandas as pd
import tkinter as tk
from tkinter import filedialog

root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename() #User selects file

file = pd.read_table(file_path, index_col=False)
df = pd.DataFrame(data=file, columns=['Measurement', 'Date', 'Time','CO2', 'Flow'], dtype=object)

print(file_path)
print(file)
print(df)

print(file_path) 输出正确的路径,print(file) 显示所有正确的数据,print(df) 显示:

 Measurement Date Time  CO2 Flow
0            NaN  NaN  NaN  NaN  NaN
1            NaN  NaN  NaN  NaN  NaN
2            NaN  NaN  NaN  NaN  NaN
3            NaN  NaN  NaN  NaN  NaN
4            NaN  NaN  NaN  NaN  NaN
5            NaN  NaN  NaN  NaN  NaN
6            NaN  NaN  NaN  NaN  NaN
7            NaN  NaN  NaN  NaN  NaN
8            NaN  NaN  NaN  NaN  NaN
.......

我之前也做过同样的事情,但是我丢失了正在编写的脚本,需要重新开始。它以前工作得很好,但我不确定发生了什么。我已经尝试了几件事来解决它:

  1. 将 pd.read_table 更改为 pd.io.parsers.read_table
  2. 更改了 pd.DataFrame 的 index=、dtype= 和其他属性
  3. 将文件转换为 .csv 并使用 pd.read_csv
  4. 显着缩短文件
  5. 创建具有单列的 pd.Series 并打印,但所有数据点仍然具有 NaN

我可以轻松地生成一组随机数据并将其转换为 pd.DataFrame 没有问题(我使用 df2 = DataFrame(np.random.randn(10, 5)columns=['a', 'b' , 'c', 'd', 'e']) 在 ipython 中显示正确)。

我用相同的数据制作了一个 numpy 数组,它运行良好。我想使用 pandas,因为我认为从长远来看,我的分析会更容易。我真的希望这是我缺少的一些小东西,但我已经为此工作了一段时间,所以我愿意尝试任何事情。

【问题讨论】:

  • 我认为你可以省略df = pd.DataFrame(data=file, columns=['Measurement', 'Date', 'Time','CO2', 'Flow'], dtype=object),因为fileDataFrame
  • 当您将旧 df 作为数据参数传递给 DataFrame 构造函数时,您实际上是在重新索引旧 df,如果您传递了一个 np 数组,那么它将起作用:pd.DataFrame(data=file.values, columns=['Measurement', 'Date', 'Time','CO2', 'Flow'], dtype=object) 此外,如果您的文件没有列您通常可以将所需名称作为参数传递给read_table,但通常您必须告诉它没有标题header=None

标签: python numpy pandas dataframe


【解决方案1】:

参考read_table的文档,你已经在文件中获取DataFrame了。

试试这个:

In [71]: f = pd.read_table('table.txt', names=['Measurement', 'Date', 'Time','CO2', 'Flow'])

In [72]: f
Out[72]:
   Measurement        Date          Time          CO2      Flow
0            1  03/27/2016  13:29:26.098  1431.778943  0.092089
1            1  03/27/2016  13:29:26.298  1432.410517  0.078570
2            1  03/27/2016  13:29:26.498  1431.905258  0.089538
3            1  03/27/2016  13:29:26.698  1431.399999  0.080930
4            5  03/28/2016  00:00:00.098  1289.422164  0.392945
5           25  03/28/2016  00:00:00.298  1289.295849  0.145016
6           25  03/28/2016  00:00:00.498  1289.295849  0.183149
7           25  03/28/2016  00:00:00.698  1288.790590  0.175114
8           26  03/28/2016  00:25:16.698  1302.053644  0.162170

那么为什么你没有得到想要的结果呢? 请注意,在读取表后,它没有所需的列名。

In [77]: file = pd.read_table('table.txt', index_col=False)

In [78]: file
Out[78]:
   1.000000  03/27/2016  13:29:26.098  1431.778943  0.092089
0         1  03/27/2016  13:29:26.298  1432.410517  0.078570
1         1  03/27/2016  13:29:26.498  1431.905258  0.089538
2         1  03/27/2016  13:29:26.698  1431.399999  0.080930
3         5  03/28/2016  00:00:00.098  1289.422164  0.392945
4        25  03/28/2016  00:00:00.298  1289.295849  0.145016
5        25  03/28/2016  00:00:00.498  1289.295849  0.183149
6        25  03/28/2016  00:00:00.698  1288.790590  0.175114
7        26  03/28/2016  00:25:16.698  1302.053644  0.162170

因此,当您使用现有 DataFrame 和 Column 名称调用 DataFrame 构造函数时,您会得到所有空值,因为输入 DataFrame 中没有按名称提供的列。

In [80]: df = pd.DataFrame(data=file, columns=['Measurement', 'Date', 'Time','CO2', 'Flow'], dtype=object)

In [81]: df
Out[81]:
  Measurement Date Time  CO2 Flow
0         NaN  NaN  NaN  NaN  NaN
1         NaN  NaN  NaN  NaN  NaN
2         NaN  NaN  NaN  NaN  NaN
3         NaN  NaN  NaN  NaN  NaN
4         NaN  NaN  NaN  NaN  NaN
5         NaN  NaN  NaN  NaN  NaN
6         NaN  NaN  NaN  NaN  NaN
7         NaN  NaN  NaN  NaN  NaN

【讨论】:

  • 您的帖子对我学习熊猫有很大的帮助!我很感激你!
  • 谢谢!我阅读了文档,但我阅读了“读取一般分隔文件 into DataFrame”。我想我仍然需要将读取的文件放入数据框中。这也是一种很好的解释方式,谢谢!
猜你喜欢
  • 2019-10-02
  • 2021-08-26
  • 2021-06-05
  • 2020-11-01
  • 2013-07-16
  • 2021-09-14
  • 2020-10-18
  • 2021-11-30
  • 1970-01-01
相关资源
最近更新 更多