GVKun编程网logo

Python-pandas数据框线图在xaxis上显示日期(pandas 数据框)

23

在本文中,我们将为您详细介绍Python-pandas数据框线图在xaxis上显示日期的相关知识,并且为您解答关于pandas数据框的疑问,此外,我们还会提供一些关于pandas数据框内存python

在本文中,我们将为您详细介绍Python-pandas数据框线图在xaxis上显示日期的相关知识,并且为您解答关于pandas 数据框的疑问,此外,我们还会提供一些关于pandas数据框内存python、Python Pandas数据框到XML、Python Pandas数据框另存为HTML页面、python – pandas数据框 – 选择行和清除内存?的有用信息。

本文目录一览:

Python-pandas数据框线图在xaxis上显示日期(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

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

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数据框另存为HTML页面

我正在尝试保存定义为Python Pandas Data FrameasHTML页面。另外,我想将此表另存为HTML表功能,以便按任何列的值进行过滤。您能否提供可能的解决方案?最后,应将此表另存为HTML页面。我想将此代码合并到我的Python代码中。谢谢

python – pandas数据框 – 选择行和清除内存?

python – pandas数据框 – 选择行和清除内存?

我有一个大型的pandas数据帧(大小= 3 GB):

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数据框 – 选择行和清除内存?等相关知识,可以在本站进行查询。

本文标签: