注意:这个问题的确是一个重复的分离pandas数据帧字符串条目到单独的行,但这里提供的答案更通用和信息丰富,所以在所有方面到期,我选择不删除线程
我有一个'数据集',格式如下:
id | value | ...
--------|-------|------
a | 156 | ...
b,c | 457 | ...
e,g,f,h | 346 | ...
... | ... | ...
Run Code Online (Sandbox Code Playgroud)
我想通过复制每个ID的所有值来规范化它:
id | value | ...
--------|-------|------
a | 156 | ...
b | 457 | ...
c | 457 | ...
e | 346 | ...
g | 346 | ...
f | 346 | ...
h | 346 | ...
... | ... | ...
Run Code Online (Sandbox Code Playgroud)
我正在做的是应用split-apply-combine pandas使用原则,为每个组 …
使用dask数据框将列拆分成多行的有效方法是什么?例如,假设我有一个csv文件,我使用dask读取它来生成以下dask数据帧:
id var1 var2
1 A Z,Y
2 B X
3 C W,U,V
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
id var1 var2
1 A Z
1 A Y
2 B X
3 C W
3 C U
3 C V
Run Code Online (Sandbox Code Playgroud)
我已经查看了Split(爆炸)pandas数据帧字符串条目的答案,以分隔行和pandas:如何将列中的文本拆分成多行?.
我尝试应用/sf/answers/1198188351/中给出的答案, 但是dask似乎不接受str.split中的expand关键字.
我也尝试应用/sf/answers/2831480851/中建议的向量化方法,但后来发现np.repeat没有在带有整数数组的dask中实现(https://github.com/dask/ dask/issues/2946).
我在熊猫中尝试了一些其他的方法,但它们真的很慢 - 可能用dask更快但我想首先检查一下是否有人用任何特定的方法取得了成功.我正在使用超过1000万行和10列(字符串数据)的数据集.分成行后,它可能会变成大约5000万行.
感谢您对此进行调查!我很感激.
我有一个数据框,显示如下:
issue_key date pkey component case_count
0 1060 2018-03-08 PROJ console,configuration,management 8
1 1464 2018-04-24 PROJ2 protocol 1
2 611 2017-03-31 PROJ None 2
3 2057 2018-10-30 PROJ ha, console 0
Run Code Online (Sandbox Code Playgroud)
我需要将组件列中具有多个值的行拆分为每个组件一行。
完成后,数据框应如下所示:
issue_key date pkey component case_count
0 1060 2018-03-08 PROJ console 8
1 1060 2018-03-08 PROJ configuration 8
2 1060 2018-03-08 PROJ management 8
3 1464 2018-04-24 PROJ2 protocol 1
4 611 2017-03-31 PROJ None 2
5 2057 2018-10-30 PROJ ha 0
6 2057 2018-10-30 PROJ console 0 …Run Code Online (Sandbox Code Playgroud) 在虚构的患者数据集中,可能会遇到下表:
pd.DataFrame({
"Patients": ["Luke", "Nigel", "Sarah"],
"Disease": ["Cooties", "Dragon Pox", "Greycale & Cooties"]
})
Run Code Online (Sandbox Code Playgroud)
它将呈现以下数据集:
现在,假设有多个疾病的行使用相同的模式(分离与字符,在这种情况下一个&),并存在一个完整列表diseases的毛病,我还没有找到一个简单的解决方案,适用于这种情况下pandas.get_dummies一个-hot编码器以获得每个患者的二进制向量。
如何以最简单的方式从初始DataFrame获得以下二进制矢量化?
pd.DataFrame({
"Patients": ["Luke", "Nigel", "Sarah"],
"Cooties":[1, 0, 1],
"Dragon Pox":[0, 1, 0],
"Greyscale":[0, 0, 1]
})
Run Code Online (Sandbox Code Playgroud)
我们有以下数据
Name genres
A Action|Adventure|Science Fiction|Thriller
B Action|Adventure|Science Fiction|Thriller
C Adventure|Science Fiction|Thriller
Run Code Online (Sandbox Code Playgroud)
我想要的数据是我的数据框
Name genres
A Action
A Adventure
A Science Fiction
A Thriller
B Action
B Adventure
B Science Fiction
B Thriller
C Adventure
C Science Fiction
C Thriller
Run Code Online (Sandbox Code Playgroud)
这是我的代码
gen = df1[df1['genres'].str.contains('|')]
gen1 = gen.copy()
gen2 = gen.copy()
gen3 = gen.copy()
gen4 = gen.copy()
gen1['genres'] = gen1['genres'].apply(lambda x: x.split("|")[0])
gen2['genres'] = gen2['genres'].apply(lambda x: x.split("|")[1])
gen3['genres'] = gen3['genres'].apply(lambda x: x.split("|")[2])
gen4['genres'] = gen4['genres'].apply(lambda x: x.split("|")[3])
Run Code Online (Sandbox Code Playgroud)
我收到错误
IndexError:列表索引超出范围
我该如何解决以下错误。测试邮件中用分号分隔的消息如下?理想情况下,我应该从测试中的相应电子邮件发送电子邮件。
测试
SENDFROM Test
xx@gmail.com xxxx@vvv.com;yyy@gggfg.com;tiitioo@ggg.com
yy@xxx.com ggg@vvv.com;yyy@gggfg.com;vvv@ggg.com
Run Code Online (Sandbox Code Playgroud)
AttributeError: 'Series' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
import smtplib, ssl
from email.message import EmailMessage
import getpass
email_pass = getpass.getpass() #Office 365 password
# email_pass = input() #Office 365 password
context=ssl.create_default_context()
for idx, row in test.iterrows():
emails = test['Test']
sender_list = test["SENDFROM"]
smtp_ssl_host = 'smtp.office365.com'
smtp_ssl_port = 587
email_login = "xx@xx.com"
email_from = sender_list
email_to = emails
msg2 = MIMEMultipart()
msg2['Subject'] = "xxx"
msg2['From'] = sender_list
msg2['To'] = ", ".join(email_to.split(";"))
msg2['X-Priority'] = …Run Code Online (Sandbox Code Playgroud) 我有一个这样的数据框:
desc id info
[a,b,c] 2 type
[u,v,w] 18 tail
Run Code Online (Sandbox Code Playgroud)
三列: desc、id、info 和 desc 是一个列表。我想要这个:
des id info
a 2 type
b 2 type
c 2 type
u 18 tail
v 18 tail
w 18 tail
Run Code Online (Sandbox Code Playgroud)
这意味着将列表列分解为多行,其他列没有变化。我真的不知道该怎么做...
假设我的DataFrame df是这样创建的:
df = pd.DataFrame({"title" : ["Robin Hood", "Madagaskar"],
"genres" : ["Action, Adventure", "Family, Animation, Comedy"]},
columns=["title", "genres"])
Run Code Online (Sandbox Code Playgroud)
它看起来像这样:
title genres
0 Robin Hood Action, Adventure
1 Madagaskar Family, Animation, Comedy
Run Code Online (Sandbox Code Playgroud)
让我们假设每部电影可以有任意数量的类型.如何将DataFrame扩展为
title genre
0 Robin Hood Action
1 Robin Hood Adventure
2 Madagaskar Family
3 Madagaskar Animation
4 Madagaskar Comedy
Run Code Online (Sandbox Code Playgroud)
?
我有这个暗网数据,数据如下所示:origin列包含一行中的多个国家/地区.
df = pd.DataFrame({'Item': ['Weapons', 'Drugs', 'Data'], 'Origin': ['US UK AUS', 'US', 'Canada']})
Run Code Online (Sandbox Code Playgroud)
我试图将第一行转换为多行.在这种情况下,三个!
df = pd.DataFrame({'Item': ['Weapons', 'Weapons', 'Weapons','Drugs', 'Data'], 'Origin': ['US', 'UK', 'AUS', 'US', 'Canada']})
Run Code Online (Sandbox Code Playgroud)
有没有我可以使用的简单代码?
如果不是这样,我怎么能使它成为可能?
我有一个数据集
ID col1 col2 year
1 A 111,222,3334 2010
2 B 344, 111 2010
3 C 121,123 2011
Run Code Online (Sandbox Code Playgroud)
我想以下列方式重新排列数据集
ID col1 col2 year
1 A 111 2010
1 A 222 2010
1 A 3334 2010
2 B 344 2010
2 B 111 2010
3 C 121 2011
3 C 123 2011
Run Code Online (Sandbox Code Playgroud)
我可以使用以下代码来完成。
a = df.COMP_MONITOR_TYPE_CODE.str[:3]
df['col2'] = np.where(a == 111, 111)
Run Code Online (Sandbox Code Playgroud)
因为,我有一个很长的数据,一个一个地做会很耗时。有没有其他方法可以做到
我有一个df称为列的列Description,它的值像:
ID Description
1 (a) this is good (b) bad (c) average
2 Ok
3 i am rahul works on (a) stack overflow (b) stack exchange
Run Code Online (Sandbox Code Playgroud)
预期DF:
ID Description
1 (a) this is good
1 (b) bad
1 (c) average
2 Ok
3 i am rahul works on (a) stack overflow
3 (b) stack exchange
Run Code Online (Sandbox Code Playgroud)