【发布时间】: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
.......
我之前也做过同样的事情,但是我丢失了正在编写的脚本,需要重新开始。它以前工作得很好,但我不确定发生了什么。我已经尝试了几件事来解决它:
- 将 pd.read_table 更改为 pd.io.parsers.read_table
- 更改了 pd.DataFrame 的 index=、dtype= 和其他属性
- 将文件转换为 .csv 并使用 pd.read_csv
- 显着缩短文件
- 创建具有单列的 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),因为file是DataFrame。 -
当您将旧 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