此处将为大家介绍关于Python-如何从一列中排序pandas数据框的详细内容,并且为您解答有关python对一列数据排序的相关问题,此外,我们还将为您介绍关于Pandas/Python:根据另一列中
此处将为大家介绍关于Python-如何从一列中排序pandas数据框的详细内容,并且为您解答有关python 对一列数据排序的相关问题,此外,我们还将为您介绍关于Pandas / Python:根据另一列中的值设置一列的值、Pandas-Python 如何从列中提取数据、pandas数据框内存python、Python Pandas数据框到XML的有用信息。
本文目录一览:- Python-如何从一列中排序pandas数据框(python 对一列数据排序)
- Pandas / Python:根据另一列中的值设置一列的值
- Pandas-Python 如何从列中提取数据
- pandas数据框内存python
- Python Pandas数据框到XML
Python-如何从一列中排序pandas数据框(python 对一列数据排序)
我有一个像这样的数据框:
print(df) 0 1 20 354.7 April 4.01 55.4 August 8.02 176.5 December 12.03 95.5 February 2.04 85.6 January 1.05 152 July 7.06 238.7 June 6.07 104.8 March 3.08 283.5 May 5.09 278.8 November 11.010 249.6 October 10.011 212.7 September 9.0
如你所见,月份不是按日历顺序排列的。因此,我创建了第二列以获取与每月(1-12)相对应的月份数。从那里,如何根据日历月的顺序对数据框进行排序?
答案1
小编典典用于sort_values
按特定列的值对df进行排序:
In [18]:df.sort_values(''2'')Out[18]: 0 1 24 85.6 January 1.03 95.5 February 2.07 104.8 March 3.00 354.7 April 4.08 283.5 May 5.06 238.7 June 6.05 152.0 July 7.01 55.4 August 8.011 212.7 September 9.010 249.6 October 10.09 278.8 November 11.02 176.5 December 12.0
如果要按两列排序sort_values
,请将列标签列表传递给,并按排序优先级对列标签进行排序。如果使用df.sort_values([''2'', ''0''])
,则结果将按列2然后按列排序0
。当然,对于这个示例,这实际上没有任何意义,因为其中的每个值df[''2'']
都是唯一的。
Pandas / Python:根据另一列中的值设置一列的值
我需要基于Pandas数据框中的另一列的值来设置一列的值。这是逻辑:
if df[''c1''] == ''Value'': df[''c2''] = 10else: df[''c2''] = df[''c3'']
我无法做到这一点,我想要做的就是简单地创建一个具有新值的列(或更改现有列的值:任何一个都对我有用)。
如果我尝试运行上面的代码,或者将其编写为函数并使用apply方法,则会得到以下信息:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
答案1
小编典典一种方法是将索引与配合使用.loc
。
例
在没有示例数据框的情况下,我将在此处进行补充:
import numpy as npimport pandas as pddf = pd.DataFrame({''c1'': list(''abcdefg'')})df.loc[5, ''c1''] = ''Value''>>> df c10 a1 b2 c3 d4 e5 Value6 g
假设您想 创建一个新列 c2
,c1
除wherec1
是之外, 该列 等效Value
,在这种情况下,您希望将其分配给10:
首先,您可以使用以下两行之一创建一个新的列c2
,并将其设置为等效于c1
,(它们本质上是做相同的事情):
df = df.assign(c2 = df[''c1''])# OR:df[''c2''] = df[''c1'']
然后,找到所有c1
等于''Value''
使用的索引.loc
,并c2
在这些索引处分配所需的值:
df.loc[df[''c1''] == ''Value'', ''c2''] = 10
最终,您将得到:
>>> df c1 c20 a a1 b b2 c c3 d d4 e e5 Value 106 g g
如果按照问题中的建议,有时您可能只是想 替换已有的列中的值 ,而不是创建一个新列,则跳过该列的创建,然后执行以下操作:
df[''c1''].loc[df[''c1''] == ''Value''] = 10# or:df.loc[df[''c1''] == ''Value'', ''c1''] = 10
给你:
>>> df c10 a1 b2 c3 d4 e5 106 g
Pandas-Python 如何从列中提取数据
如何解决Pandas-Python 如何从列中提取数据?
Panda 从 url 接收数据并制作数据表,如何从该数据框中提取特定列到列表中。具体来说,这是我的代码,允许熊猫从 url 中检索信息
url="https://pkgstore.datahub.io/core/nasdaq-listings/nasdaq-listed_csv/data/7665719fb51081ba0bd834fde71ce822/nasdaq-listed_csv.csv"
req = requests.get(url).content
companies = pd.read_csv(io.StringIO(req.decode(''utf-8'')))
当我这样做时
print(companies)
我得到以下结果:
我希望的输出是能够将 Symbol 列中的数据提取到一个列表中,以便该列表将包含 [''Symbol'',''AAIT'',''AAL'',...''ZUMZ'']
解决方法
这应该适用于您的用例:
# You can create the Symbols list with this:
symbols_list = companies[''Symbol''].to_list()
# This is not really needed. But as you want to have "Symbol" word at the start,you can do the following
your_desired_list = [''Symbol'']
your_desired_list += symbols_list
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数据框和python 对一列数据排序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Pandas / Python:根据另一列中的值设置一列的值、Pandas-Python 如何从列中提取数据、pandas数据框内存python、Python Pandas数据框到XML等相关知识的信息别忘了在本站进行查找喔。
本文标签: