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