- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题类似于this one和 this one但我无法让他们的解决方案解决我的问题。
我有一个如下所示的数据框:
study_id fuzzy_market
0 study1 [Age: 18-67], [Country of Birth: Austria, Germany], [Country: Austria, Germany], [Language: German]
1 study2 [Country: Germany], [Management experience: Yes]
2 study3 [Country: United Kingdom], [Language: English]
3 study4 [Age: 18-67], [Country of Birth: Austria, Germany], [Country: Austria, Germany], [Language: German]
4 study5 [Age: 48-99]
我希望它看起来像这样:
所以每 study_id
一行, fuzzy_market
中每个冒号之前的文本列作为列标题,每个冒号后面的文本作为单元格中的数据。如果某列没有相关数据,我想用 None
填充它。所有列都可以是字符串。我不知道会有多少列,所以我需要它是动态的。
这是设置和数据:
import pandas as pd
import numpy as np
import re
np.random.seed(12345)
df = pd.DataFrame.from_dict({'study_id': {0: 'study1',
1: 'study2',
2: 'study3',
3: 'study4',
4: 'study5'},
'fuzzy_market': {0: '[Age: 18-67], [Country of Birth: Austria, Germany], [Country: Austria, Germany], [Language: German]',
1: '[Country: Germany], [Management experience: Yes]',
2: '[Country: United Kingdom], [Language: English]',
3: '[Age: 18-67], [Country of Birth: Austria, Germany], [Country: Austria, Germany], [Language: German]',
4: '[Age: 48-99]'}})
到目前为止,我已经尝试操作 fuzzy_markets
中的字符串专栏,但我认为这种方法不正确。
# a function to strip the square brackets, as I'm not sure this is really a list in here
def remove_square_brackets(x):
return re.sub(r"[\[\]]", "", x)
# make a new dataframe where there are new columns for data after every comma
df2 = df.join(df['fuzzy_market'].apply(remove_square_brackets).str.split(',', expand=True))
# rename the columns arbitrarily - these will need to be the question titles eventually e.g. Age rather than A, Country of Birth rather than B etc.
df2.columns = ('study_id', 'fuzzy_market', 'A', 'B', 'C', 'D', 'E', 'F')
# try and split again
df3 = df2[['study_id','A', 'B']].join(df2['A'].str.split(":", expand=True).rename(columns={0:'A1', 1:'A2'})).join(df2['B'].str.split(":", expand=True).rename(columns={0:'B1', 1:'B2'}))
# this isn't quite there yet
df3
study_id A B A1 A2 B1 B2
0 study1 Age: 18-67 Country of Birth: Austria Age 18-67 Country of Birth Austria
1 study2 Country: Germany Management experience: Yes Country Germany Management experience Yes
2 study3 Country: United Kingdom Language: English Country United Kingdom Language English
3 study4 Age: 18-67 Country of Birth: Austria Age 18-67 Country of Birth Austria
4 study5 Age: 48-99 None Age 48-99 None None
感谢您的帮助或提示!
最佳答案
我们可以使用findall
从每一行中提取所有匹配的键值对,然后将这些对映射到 dict
并创建一个数据帧
p = df['fuzzy_market'].str.findall(r'([^:\[]+): ([^\]]+)')
df[['study_id']].join(pd.DataFrame(map(dict, p)))
study_id Age Country of Birth Country Language Management experience
0 study1 18-67 Austria, Germany Austria, Germany German NaN
1 study2 NaN NaN Germany NaN Yes
2 study3 NaN NaN United Kingdom English NaN
3 study4 18-67 Austria, Germany Austria, Germany German NaN
4 study5 48-99 NaN NaN NaN NaN
关于python - pandas:将字符串列拆分为多列并动态命名列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69453499/
我有一个数组列表: ArrayList allText = new ArrayList(); 其内容是这样的: [Alabama - Montgomery, Alaska - Juneau, Ariz
我有一个 timestamp 格式的开始和结束时间。我想将它们分成多个时间段,例如 1 小时。 $t1 = strtotime('2010-05-06 12:00:00'); $t2 = strtot
我需要将 span10 分成 3 列,但我无法将它们排列起来。我应该在 span10 中添加一个 span12 还是使用 offset 还是??
我有一个时间序列。我想从早上 8 点到第二天早上 7:59 分成 24 小时的区 block 。我知道如何按日期分组,但我尝试过使用 TimeGroupers 和 DateOffsets 处理这个 8
我收到“街道号码邮政编码城市”形式的地址(作为字符串)。我想要做的是将街道和号码与邮政编码和城市分开。通常你可以按空格分割。但有些街道名称中也有空格,例如:“Emile Van Ermengemlaa
我有一个用户列表。其中一些用户处于第一状态,而其他用户处于第二状态。所以我想要的是将这个列表显示为首先,它按排序顺序显示存在 = 1 的用户,然后按排序顺序显示存在 = 2 的用户。这里的排序是根据用
我感觉我搜索了整个网络,但找不到一种方法将不同高度的 div 很好地划分为 3 列,就像 http://www.ing.nl 上那样 headertekst headerteksttesth
Bootstrap 3 按钮下拉菜单出现问题。你可以在这里看到我的两个例子: http://www.bootply.com/W1dLusilMk http://www.bootply.com/GGBv
我在 php 中执行以下操作 foreach($QuestionAsekd as $k => $v){ $grp_name = $v['NAME']; $groupValues[$gr
我找到了一种用pandas解析html的绝妙方法。我的数据格式有点奇怪(见下文)。我想将这些数据拆分为 2 个单独的数据帧。 注意每个单元格如何由,分隔...是否有任何真正有效的方法来分割所有这些单元
HTML 看起来像这样,但我不允许对其进行更改。我只能编写 CSS 将其变成 2 列。 Povezave www.behance.net www.kiberpipa.org www.o
假设我有以下数据框“A” utilization utilization_billable service 1
我需要将 2 个文本框拉伸(stretch)到 100% 的浏览器宽度,以及一个提交按钮。所有三个都应该在一行中,我试图拉伸(stretch)它但它没有发生......有什么想法吗? 代码: .sea
我是一名优秀的程序员,十分优秀!