Python 从一行数据帧创建系列

Python 从一行数据帧创建系列,python,pandas,Python,Pandas,我有以下数据帧: Symbol, col1, col2, col3 abc, 435, 5465, 675 xyz, 565, 45, 567 mno, 675, 456, 789 print df3.loc['UK'] print type(df3.loc['UK']) City Continent Country UK London Europe UK

我有以下数据帧:

Symbol, col1, col2, col3
abc,    435,  5465, 675
xyz,    565,  45,   567
mno,    675,  456,  789
print df3.loc['UK']
print type(df3.loc['UK'])
                City Continent
Country                       
UK            London    Europe
UK       Manchester    Europe
<class 'pandas.core.frame.DataFrame'>
我想根据符号选择一个特定的行,结果是一个系列。例如,选择xyz应提供以下系列:

Symbol, col1, col2, col3
xyz,    565,  45,   567

我已经把逻辑规则放在适当的位置,这样符号应该总是唯一的。但纯粹出于兴趣,如果符号不是唯一的,会发生什么情况(假设有一种方法来处理它吗?)

如果索引值不是唯一的,则会得到一个数据帧而不是一个序列:

import pandas as pd

data = [['Tokyo','London', 'New York', 'Manchester'],
['Japan','UK','US','UK'],
['Asia','Europe','North America','Europe']]

df = pd.DataFrame(data).transpose()
df.columns = ['City','Country','Continent']
df2 = df.set_index('City')
选择Tokyo可获得一系列:

print df2.loc['Tokyo']
print type(df2.loc['Tokyo']) 

Country      Japan
Continent     Asia
Name: Tokyo, dtype: object

<class 'pandas.core.series.Series'>
然后得到一个数据帧:

Symbol, col1, col2, col3
abc,    435,  5465, 675
xyz,    565,  45,   567
mno,    675,  456,  789
print df3.loc['UK']
print type(df3.loc['UK'])
                City Continent
Country                       
UK            London    Europe
UK       Manchester    Europe
<class 'pandas.core.frame.DataFrame'>
print df3.loc['UK']
打印类型(df3.loc['UK'])
城市大陆
国家
英国伦敦欧洲
英国曼彻斯特欧洲

因此,我不确定在不删除某些数据的情况下处理这种情况意味着什么。

假设Symbol是DataFrame索引,只需使用DataFrame.loc选择所需的行:

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(9).reshape(3, 3), 
                  index=['abc', 'xyz', 'mno'], 
                  columns=['col1', 'col2', 'col3'])
df 
col1    col2    col3
abc 0   1   2
xyz 3   4   5
mno 6   7   8

In [21]: df.loc['xyz']
Out[21]:
col1    3
col2    4
col3    5


In [22]:

    isinstance(df.loc['xyz'], pd.Series)
Out[22]:
True
数据帧的单行或列是一个系列。例如,要选择第一列,只需调用df['col1']

如果“Symbol”不是索引,则可以将其设置为索引或使用以下布尔键方法:

df[df.Symbol == 'xyz']
这也相当于

df.loc[df.Symbol == 'xyz']
第二种方法对于使用布尔键的赋值很有用

对于非唯一索引,调用df.loc将返回与包含该索引的所有行对应的数据帧:

在[23]中:

df = pd.DataFrame(np.arange(12).reshape(4, 3), 
                  index=['abc', 'xyz', 'mno', 'xyz'], 
                  columns=['col1', 'col2', 'col3'])

In [24]:

df.loc['xyz']
Out[24]:
col1    col2    col3
xyz 3   4   5
xyz 9   10  11