从txt文件绘制简单图形python

从txt文件绘制简单图形python,python,numpy,pandas,matplotlib,graph,Python,Numpy,Pandas,Matplotlib,Graph,我试图剥离并获取.txt文件中的数据,以便绘制一个简单的图形,但我似乎无法将数据转换为我想要的格式。有人能给我指引正确的方向吗 下面是文本文件中数据的一个简短示例,在python中,我尝试.read()读取文本文件,然后绘制一个简单的图形,如果可能的话,使用文本文件本身的标题 Date,Value 2016-03-31,0.7927 2016-03-30,0.7859 2016-03-29,0.7843 2016-03-24,0.7893 2016-03-23,0.792

我试图剥离并获取.txt文件中的数据,以便绘制一个简单的图形,但我似乎无法将数据转换为我想要的格式。有人能给我指引正确的方向吗

下面是文本文件中数据的一个简短示例,在python中,我尝试.read()读取文本文件,然后绘制一个简单的图形,如果可能的话,使用文本文件本身的标题

Date,Value
2016-03-31,0.7927
2016-03-30,0.7859    
2016-03-29,0.7843  
2016-03-24,0.7893    
2016-03-23,0.792    
2016-03-22,0.7897    
2016-03-21,0.7818    
2016-03-18,0.778    
2016-03-17,0.781    
2016-03-16,0.7855   
2016-03-15,0.7845
我迄今为止尝试过的python代码:(这不是完美的代码,因为我还在整理它!)


pandas
中的
DataFrame
对象已经有一个函数
plot()
,非常有用。将您的示例复制到剪贴板,我可以执行绘图,只需执行以下操作:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_clipboard(delimiter=',')
df.plot()
ax = plt.gca()
ax.set_xticklabels(df.Date)
plt.savefig(filename='test.png')

这些行将数据行拆分为空格,而不是逗号:

x = [row.split()[0] for row in data]
y = [row.split()[1] for row in data]
您需要指定要拆分的字符(默认为空白字符):

编辑:附加数据清理

如果数据文件具有尾随换行符,则

y = [row.split(',')[1] for row in data]
将引发一个
索引器
,因为后面的换行符行将没有第二个元素:

>>> data = 'a,b\nc,d\n'.split('\n')
>>> print(data)
['a,b', 'c,d', '']
>>> print(data[0].split(','))
['a', 'b']
>>> print(data[-1].split(','))
['']   
在拆分值之前,通过测试行不是空字符串来对此进行防御:

x = [row.split(',')[0] for row in data if row]
y = [row.split(',')[1] for row in data if row]
还需要从传递给matplotlib的值中删除列标题名称。通过在创建x和y值时忽略第一行来执行此操作:

>>> data = 'First,Second\na,b\nc,d\n'.split('\n')
>>> print(data)
['First,Second', 'a,b', 'c,d', '']
>>> x = [row.split(',')[0] for row in data[1:] if row]
>>> print(x)
['a', 'c']
>>> y = [row.split(',')[1] for row in data[1:] if row]
>>> print(y)
['b', 'd']
对于pandas(我使用下面的
导入pandas作为pd
),这实际上可以通过一行完成:

 pd.read_table('datafile.txt', parse_dates = True, index_col = 0, sep = ',').plot()
其中,
parse_dates
关键字告诉pandas尝试将索引转换为datetime。结果如下所示:

谢谢,我试过了,效果非常好!我还没有能力写这么漂亮的东西!谢谢你的帮助!但是,当我尝试使用'x=[row.split(',')[0]来表示数据中的行]`时,我得到了以下结果:indexer:List index超出范围….?@AlexWalton您确定它位于
x=…
行而不是
y=
行吗?根据我的经验,str.split方法总是至少包含一个元素,因此索引0的
索引器似乎不太可能出现。但是,如果您的文件包含一行不带逗号的行,则索引1上可能会出现
索引器
,例如,如果末尾有一个空行。感谢您回来!好的,我没有正确格式化代码。是的,你是对的,它在
y=…
上,而不是
x=。我返回到原始文本文件,试图删除和“空格”,但仍然会导致错误。因此,它实际做的是与末尾的空行(或者如果有一行没有错误!)混淆,
y=[row.split(',')[1]对于数据行中的行,如果row]
work?它允许我进一步深入代码,但抛出另一个错误:
返回数组(a,dtype,copy=False,order=order)ValueError:无法将字符串转换为浮点值:值
>>> data = 'First,Second\na,b\nc,d\n'.split('\n')
>>> print(data)
['First,Second', 'a,b', 'c,d', '']
>>> x = [row.split(',')[0] for row in data[1:] if row]
>>> print(x)
['a', 'c']
>>> y = [row.split(',')[1] for row in data[1:] if row]
>>> print(y)
['b', 'd']
 pd.read_table('datafile.txt', parse_dates = True, index_col = 0, sep = ',').plot()