在本文中,我们将为您详细介绍Python-pandas数据框线图在xaxis上显示日期的相关知识,并且为您解答关于pandas数据框的疑问,此外,我们还会提供一些关于pandas数据框内存python
在本文中,我们将为您详细介绍Python-pandas数据框线图在xaxis上显示日期的相关知识,并且为您解答关于pandas 数据框的疑问,此外,我们还会提供一些关于pandas数据框内存python、Python Pandas数据框到XML、Python Pandas数据框另存为HTML页面、python – pandas数据框 – 选择行和清除内存?的有用信息。
本文目录一览:- Python-pandas数据框线图在xaxis上显示日期(pandas 数据框)
- pandas数据框内存python
- Python Pandas数据框到XML
- Python Pandas数据框另存为HTML页面
- python – pandas数据框 – 选择行和清除内存?
Python-pandas数据框线图在xaxis上显示日期(pandas 数据框)
比较以下代码:
test = pd.DataFrame({''date'':[''20170527'',''20170526'',''20170525''],''ratio1'':[1,0.98,0.97]})test[''date''] = pd.to_datetime(test[''date''])test = test.set_index(''date'')ax = test.plot()
我最后添加DateFormatter
:
test = pd.DataFrame({''date'':[''20170527'',''20170526'',''20170525''],''ratio1'':[1,0.98,0.97]})test[''date''] = pd.to_datetime(test[''date''])test = test.set_index(''date'')ax = test.plot()ax.xaxis.set_minor_formatter(dates.DateFormatter(''%d\n\n%a'')) ## Added this line
与第二张图的问题是,它开始于5-24代替5-25。另外,5-252017年的星期四不是星期一。是什么原因引起的?这个时区相关吗?(我也不明白为什么日期数字会彼此叠加)
答案1
小编典典通常,pandas和matplotlib的datetime实用程序不兼容。因此,matplotlib.dates
在大多数情况下,尝试在使用熊猫创建的日期轴上使用对象会失败。
原因之一是例如从文档中看到的
datetime
对象将转换为浮点数,该浮点数表示自0001-01-01 UTC以来的天数(加1)。例如,0001-01-01、06:00是1.25,而不是0.25。
但是,这不是唯一的区别,因此建议在日期时间对象中不要混合使用熊猫和matplotlib。
但是,可以选择告诉熊猫不要使用其自己的日期时间格式。在这种情况下,可以使用matplotlib.dates
股票行情。这可以通过操纵。
df.plot(x_compat=True)
由于熊猫不提供复杂的日期格式化功能,因此可以使用matplotlib进行绘图和格式化。
import pandas as pdimport matplotlib.pyplot as pltimport matplotlib.dates as datesdf = pd.DataFrame({''date'':[''20170527'',''20170526'',''20170525''],''ratio1'':[1,0.98,0.97]})df[''date''] = pd.to_datetime(df[''date''])usePandas=True#Either use pandasif usePandas: df = df.set_index(''date'') df.plot(x_compat=True) plt.gca().xaxis.set_major_locator(dates.DayLocator()) plt.gca().xaxis.set_major_formatter(dates.DateFormatter(''%d\n\n%a'')) plt.gca().invert_xaxis() plt.gcf().autofmt_xdate(rotation=0, ha="center")# or use matplotlibelse: plt.plot(df["date"], df["ratio1"]) plt.gca().xaxis.set_major_locator(dates.DayLocator()) plt.gca().xaxis.set_major_formatter(dates.DateFormatter(''%d\n\n%a'')) plt.gca().invert_xaxis()plt.show()
pandas数据框内存python
我想将稀疏矩阵(156060x11780)转换为数据帧,但出现内存错误,这是我的代码
vect = TfidfVectorizer(sublinear_tf=True,analyzer='word',stop_words='english',tokenizer=tokenize,strip_accents = 'ascii')
X = vect.fit_transform(df.pop('Phrase')).toarray()
for i,col in enumerate(vect.get_feature_names()):
df[col] = X[:,i]
我有一个问题 X = vect.fit_transform(df.pop('Phrase')).toarray()
。我该如何解决?
Python Pandas数据框到XML
希望能提供帮助或朝正确的方向前进。我有一个来自txt文件的pandas数据框,并希望将其插入我正在制作的xml文档中。我可以设置xml文档,并使用以下方法将数据框转换为xml:如何将熊猫/数据框转换为XML?但是我似乎无法将转换后的数据框xml插入制作的xml文档中。
到目前为止,我的代码是:
import pandas as pdfrom xml.dom.minidom import Documentfrom xml.dom.minidom import parseStringcolnamesRBR = [''TIMESTAMP'',''A'']df = pd.read_table(''test_data.txt'',sep = '','',header=0,names=colnamesRBR,parse_dates={''datetime'':[''TIMESTAMP'']},index_col=''datetime'')doc = Document()base = doc.createElement(''Timeseries'')doc.appendChild(base)entry = doc.createElement(''Series'')base.appendChild(entry)entry1 = doc.createElement(''Header'')entry.appendChild(entry1)type = doc.createElement(''type'')type_content = doc.createTextNode(''instantaneous'')type.appendChild(type_content)entry1.appendChild(type)timeStepElem = doc.createElement(''timeStep'')timeStepElem.setAttribute (''unit'',''minute'')timeStepElem.setAttribute (''multiplier'',''5'')entry1.appendChild(timeStepElem)startDateElem = doc.createElement(''startDate'')startDateElem.setAttribute (''time'',''13:30:00'')startDateElem.setAttribute (''date'',''2015-06-24'')entry1.appendChild(startDateElem)eventElem = doc.createElement(''event'')eventElem.setAttribute (''time'',''endDate'')eventElem.setAttribute (''date'',''2015-06-25'')eventElem.setAttribute (''value'',''2015-06-25'')entry.appendChild(eventElem)def to_xml(df, filename=None, mode=''w''): def row_to_xml(row): xml = [] for i, col_name in enumerate(row.index): xml.append('' <event date="{0}" time="{1}" value="{1}"/>''.format(col_name, row.iloc[i])) return ''\n''.join(xml) res = ''\n''.join(df.apply(row_to_xml, axis=0)) if filename is None: return res with open(filename, mode) as f: f.write(res)series = parseString(to_xml(df)).childNodes[0]entry.appendChild(series)pd.DataFrame.to_xml = to_xmlprint df.to_xml()f = open("test.xml","w")doc.writexml(f, indent = " ", addindent=" ",newl="\n")f.close()
保存的xml输出文件看起来不错:
<?xml version="1.0" ?> <Timeseries> <Series> <Header> <type>instantaneous</type> <timeStep multiplier="5" unit="minute"/> <startDate date="2015-06-24" time="13:30:00"/> </Header> <event date="2015-06-25" time="endDate" value="2015-06-25"/> </Series> </Timeseries>
和熊猫数据帧转换的xml是好的:
<event date="2015-03-09 15:40:00" time="52.2885" value="52.2885"/> <event date="2015-03-09 15:50:00" time="52.3277" value="52.3277"/> <event date="2015-03-09 16:00:00" time="52.5045" value="52.5045"/> <event date="2015-03-09 16:10:00" time="52.5702" value="52.5702"/> <event date="2015-03-09 16:20:00" time="52.5608" value="52.5608"/>
我似乎似乎无法将以上内容插入到xml文档的series元素下,在该文档中我已经手动完成了该操作。尝试了一段时间,似乎无法将其添加到element.attribute函数中,这时开始怀疑我是否不应该将txt直接解析为xml,但我现在喜欢pd选项。
如果有帮助,请提供一些示例数据:
TIMESTAMP,A2015/03/09 15:40,52.28852015/03/09 15:50,52.32772015/03/09 16:00,52.50452015/03/09 16:10,52.57022015/03/09 16:20,52.5608
当前的错误是:
File "<ipython-input-10-906277431901>", line 1, in <module> runfile(''C:/Users/clinton.chrystal/Documents/Python Scripts/Clint/Text_changes/from_data_to_xml_for SO.py'', wdir=''C:/Users/clinton.chrystal/Documents/Python Scripts/Clint/Text_changes'') File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 682, in runfile execfile(filename, namespace) File "C:\Anaconda\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 71, in execfile exec(compile(scripttext, filename, ''exec''), glob, loc) File "C:/Users/clinton.chrystal/Documents/Python Scripts/Clint/Text_changes/from_data_to_xml_for SO.py", line 60, in <module> series = parseString(to_xml(df)).childNodes[0] File "C:\Anaconda\lib\xml\dom\minidom.py", line 1928, in parseString return expatbuilder.parseString(string) File "C:\Anaconda\lib\xml\dom\expatbuilder.py", line 940, in parseString return builder.parseString(string) File "C:\Anaconda\lib\xml\dom\expatbuilder.py", line 223, in parseString parser.Parse(string, True)ExpatError: junk after document element: line 2, column 2
答案1
小编典典首先摆脱方法中的Series
标签to_xml
:
def to_xml(df, filename=None, mode=''w''): def row_to_xml(row): date = row.TIMESTAMP.split()[0] time = row.TIMESTAMP.split()[1] value = row.A xml = ''<event date="{0}" time="{1}" value="{2}"></event>''.format(date, time, value) return xml res = '' ''.join(df.apply(row_to_xml, axis=1)) if filename is None: return res with open(filename, mode) as f: f.write(res)
然后,您可以像这样创建XML树:
*from xml.dom.minidom import parseStringdoc = Document()base = doc.createElement(''Timeseries'')doc.appendChild(base)series = parseString(''<Series>'' + to_xml(df) + ''</Series>'').childNodes[0]base.appendChild(series)base.appendChild(series)header = doc.createElement(''Header'')series.appendChild(header)type = doc.createElement(''type'')type_content = doc.createTextNode(''instantaneous'')type.appendChild(type_content)header.appendChild(type)timeStepElem = doc.createElement(''timeStep'')timeStepElem.setAttribute (''unit'',''minute'')timeStepElem.setAttribute (''multiplier'',''5'')header.appendChild(timeStepElem)startDateElem = doc.createElement(''startDate'')startDateElem.setAttribute (''time'',''13:30:00'')startDateElem.setAttribute (''date'',''2015-06-24'')header.appendChild(startDateElem)print(doc.toprettyxml())*
输出:
<?xml version="1.0" ?><Timeseries> <Series> <event date="2015/03/09" time="15:40" value="52.2885"/> <event date="2015/03/09" time="15:50" value="52.3277"/> <event date="2015/03/09" time="16:00" value="52.5045"/> <event date="2015/03/09" time="16:10" value="52.5702"/> <event date="2015/03/09" time="16:20" value="52.5608"/> <Header> <type>instantaneous</type> <timeStep multiplier="5" unit="minute"/> <startDate date="2015-06-24" time="13:30:00"/> </Header> </Series></Timeseries>
Python Pandas数据框另存为HTML页面
我正在尝试保存定义为Python Pandas Data
Frame
asHTML
页面。另外,我想将此表另存为HTML
表功能,以便按任何列的值进行过滤。您能否提供可能的解决方案?最后,应将此表另存为HTML
页面。我想将此代码合并到我的Python
代码中。谢谢
python – pandas数据框 – 选择行和清除内存?
x = read.table(‘big_table.txt’,sep=’\t’,header=0,index_col=0)
因为我在内存限制下工作,所以我对数据帧进行了子集化:
rows = calculate_rows() # a function that calculates what rows I need
cols = calculate_cols() # a function that calculates what cols I need
x = x.ix[rows,cols]
计算行和列的函数并不重要,但它们绝对是原始行和列的较小子集.但是,当我执行此操作时,内存使用量会增加很多!最初的目标是将内存占用减少到3GB以下,但内存使用量远远超过6GB.
我猜这是因为Python在内存中创建了数据帧的本地副本,但是没有清理它.可能还有其他事情正在发生……所以我的问题是如何对大型数据框进行子集化并清理空间?我找不到一个选择行/列的函数.
我已经阅读了很多Stack Overflow,但在这个主题上找不到多少.可能是我没有使用正确的关键字,所以如果你有建议,这也可能有所帮助.谢谢!
解决方法
指定usecols以在第一个位置为read_csv选择所需的列,请参阅here.
然后以块的形式读取文件,参见here,如果选择了所需的行,将它们分流到关闭状态,最后连接结果.
伪码ish:
reader = pd.read_csv('big_table.txt',sep='\t',index_col=0,usecols=the_columns_i_want_to_use,chunksize=10000) df = pd.concat([ chunk.ix[rows_that_I_want_] for chunk in reader ])
这将具有恒定的内存使用量(块的大小)
加上选定的行用法x 2,这将在您连接行时发生在concat之后,使用情况将下降到选定的行使用情况
今天关于Python-pandas数据框线图在xaxis上显示日期和pandas 数据框的分享就到这里,希望大家有所收获,若想了解更多关于pandas数据框内存python、Python Pandas数据框到XML、Python Pandas数据框另存为HTML页面、python – pandas数据框 – 选择行和清除内存?等相关知识,可以在本站进行查询。
本文标签: