微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python – Pandas – 从DataFrame中提取列名

我在Jupyter笔记本(Python 2)中使用Pandas read_csv导入了制表符分隔文件,并且我已经提取了感兴趣的单列

rawData = pd.read_csv(filename, delim_whitespace = True, header = 20)
columnOfInterest = rawData.ix[:, 9] 

我感兴趣的专栏的格式如下:

header1=123;header2=123;header3=123

并非此DataFrame中的每一行都包含每个标头,而且我不知道完整的可能标头集. 123s,我的数据值,都是数字.

在使用分割列中的元素之后;作为我的分隔符,我的所有行都有一些列,这些列等于行中的值的数量,这在整个数据集中是不一致的.我想将其转换为缺少值的矩阵.

我想要做的是从我的DataFrame中获取每一行,提取标题信息,如果标题标签是新的(即它已经处理过的任何行中没有),那么我想添加它到我的列名列表.当然,我想从行中删除标题名称和等号,我希望我的数据都在适当的位置(因此,使用附加到每个数据值的标题信息将值放在适当的列中).所以,我想要一些看起来像这样的东西:

# Original data frame, first 2 rows
['header1=123', 'header2=123', 'header3=123'] # <--- no header4
['header1=123', 'header3=123', 'header4=123'] # <--- no header2

# New data frame, first 2 rows plus column names
header1    header2    header3    header4 
123        123        123        null    # <--- header4 == null
123        null       123        123     # <--- header2 == null

显然,这似乎是一个正则表达式的工作!但是,我对如何在熊猫中解决这个问题感到茫然.丢失的数据应为null.

谢谢!

解决方法:

如果你有像数据帧

df = pd.DataFrame([['header1=123', 'header2=123', 'header3=123'],['header1=123', 'header3=123', 'header4=123']])

然后,您可以将数据拆分为=然后创建一个字典,pd.DataFrame构造函数将处理其余的数据,即

new = [[j.split('=') for j in i] for i in df.values ]

di=[{k:j for k,j in i} for i in new]

new_df = pd.DataFrame(di)

输出

字典:

[ {'header1': '123', 'header2': '123', 'header3': '123'},
 {'header1': '123', 'header3': '123', 'header4': '123'}]

数据帧:

  header1 header2 header3 header4
0     123     123     123     NaN
1     123     NaN     123     123

希望能帮助到你

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐