来自元组的 Pandas DataFrame 列
Posted
技术标签:
【中文标题】来自元组的 Pandas DataFrame 列【英文标题】:Pandas DataFrame column from a tuple 【发布时间】:2016-08-25 02:34:21 【问题描述】:我有一本字典:
employer =
'CrntEmp_city': ('XXX', 'XXX'),
'CrntEmp_cntry': ('XXX', 'XXX'),
'CrntEmp_orgNm': ('XXXX LLC', 'YYYY LLC'),
'CrntEmp_orgPK': ('1234567891', '1234567899'),
'CrntEmp_postlCd': ('12345', '12345'),
'CrntEmp_state': ('AK', 'AK'),
'CrntEmp_str1': ('999 XXX', '999 XXX'),
'CrntEmp_str2': ('XXXX', 'XXXX')
我想将其读入一个 DataFrame,其中 一行八列 对应于键。但是无论我尝试如何,pandas 总是会给我两列(通过拆分逗号所在的元组)。示例:
pd.DataFrame([tuple(i) for i in employ.values()])
returns
0 1
0 XXXX LLC YYYY LLC
1 XXXX XXXX
2 999 XXX 999 XXX
3 XXX XXX
4 12345 12345
5 XXX XXX
6 AK AK
7 1234567891 1234567899
我想要的是这个:
0 1
0 (XXXX LLC, YYYY LLC) (XXXX, XXXX)
etc.
因此此命令失败:
pd.DataFrame([tuple(i) for i in employ.values()],columns=employ.keys(),index=[0])
有什么想法吗?
【问题讨论】:
【参考方案1】:你基本上想要这样的东西:pd.DataFrame('col1': [(a, b)], 'col2': [(c, d)])
您可以在 Python 2 中使用如下的字典推导来实现这一点。对于 Python 3,请改用 employer.iter()
。
>>> pd.DataFrame(k: [tuple(v)] for k, v in employer.iteritems())
CrntEmp_city CrntEmp_cntry CrntEmp_orgNm CrntEmp_orgPK CrntEmp_postlCd CrntEmp_state CrntEmp_str1 CrntEmp_str2
0 (XXX, XXX) (XXX, XXX) (XXXX LLC, YYYY LLC) (1234567891, 1234567899) (12345, 12345) (AK, AK) (999 XXX, 999 XXX) (XXXX, XXXX)
【讨论】:
谢谢,这行得通。 Pandas 确实应该有一个内置选项。【参考方案2】:尝试通过首先将数据定义为系列来强制数据为一列:
import pandas as pd
pd.DataFrame(data=pd.Series(employer.values()))
然后输出匹配您的示例所需结果(与您的原始描述不匹配,但我假设您可以从此处获取)。
0
0 (XXXX LLC, YYYY LLC)
1 (XXXX, XXXX)
2 (999 XXX, 999 XXX)
3 (XXX, XXX)
4 (12345, 12345)
5 (XXX, XXX)
6 (AK, AK)
7 (1234567891, 1234567899)
【讨论】:
【参考方案3】:我觉得你可以用iteritems()
:
import pandas as pd
employer = 'CrntEmp_city': ('XXX', 'XXX'),
'CrntEmp_cntry': ('XXX', 'XXX'),
'CrntEmp_orgNm': ('XXXX LLC', 'YYYY LLC'),
'CrntEmp_orgPK': ('1234567891', '1234567899'),
'CrntEmp_postlCd': ('12345', '12345'),
'CrntEmp_state': ('AK', 'AK'),
'CrntEmp_str1': ('999 XXX', '999 XXX'),
'CrntEmp_str2': ('XXXX', 'XXXX')
print pd.DataFrame([i for i in employer.iteritems()])
0 1
0 CrntEmp_orgNm (XXXX LLC, YYYY LLC)
1 CrntEmp_str2 (XXXX, XXXX)
2 CrntEmp_str1 (999 XXX, 999 XXX)
3 CrntEmp_cntry (XXX, XXX)
4 CrntEmp_postlCd (12345, 12345)
5 CrntEmp_city (XXX, XXX)
6 CrntEmp_state (AK, AK)
7 CrntEmp_orgPK (1234567891, 1234567899)
【讨论】:
感谢您的回复,但在调用 pd.DataFrame 作为我的函数的一部分时,我需要一行和读入的列。该解决方案需要不止一步才能将数据转换为所需的格式。以上是关于来自元组的 Pandas DataFrame 列的主要内容,如果未能解决你的问题,请参考以下文章
如何最好地将包含列表或元组的 Pandas 列提取到多个列中[重复]
Pandas 替换列中的值,但 to_replace 参数是包含元组的元组
pandas索引复合索引dataframe数据索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value)使用元组tuple表达复合索引的指定行