相关疑难解决方法(0)

通过复制规范化数据

注意:这个问题的确是一个重复的分离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使用原则,为每个组 …

python pandas split-apply-combine

5
推荐指数
1
解决办法
594
查看次数

Dask数据帧 - 根据分隔符将列拆分为多行

使用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万行.

感谢您对此进行调查!我很感激.

python performance pandas dask

5
推荐指数
1
解决办法
875
查看次数

Pandas DataFrame:如何通过多值列将一行分成多行?

我有一个数据框,显示如下:

   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)

python pandas

4
推荐指数
1
解决办法
1161
查看次数

二进制矢量化熊猫DataFrame列

在虚构的患者数据集中,可能会遇到下表:

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)

所需结果

python dataframe pandas

4
推荐指数
1
解决办法
98
查看次数

如何在 Pandas 中将字符串分成多行

我们有以下数据

  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:列表索引超出范围

pandas pandas-groupby

3
推荐指数
1
解决办法
3101
查看次数

AttributeError:“Series”对象在发送电子邮件时没有属性“split”错误

我该如何解决以下错误。测试邮件中用分号分隔的消息如下?理想情况下,我应该从测试中的相应电子邮件发送电子邮件。

测试

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)

python smtp pandas

3
推荐指数
1
解决办法
6万
查看次数

Python数据框将列表列分解为多行

我有一个这样的数据框:

         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)

这意味着将列表列分解为多行,其他列没有变化。我真的不知道该怎么做...

python dataframe pandas

2
推荐指数
1
解决办法
1360
查看次数

如何将字符串值拆分/扩展为几个pandas DataFrame行?

假设我的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)

pandas

2
推荐指数
1
解决办法
1316
查看次数

将一串空格分隔的单词拆分为多行

我有这个暗网数据,数据如下所示: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)

有没有我可以使用的简单代码?

如果不是这样,我怎么能使它成为可能?

python string split dataframe pandas

2
推荐指数
1
解决办法
447
查看次数

提取不同行中的多个值

我有一个数据集

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)

因为,我有一个很长的数据,一个一个地做会很耗时。有没有其他方法可以做到

python pandas

1
推荐指数
1
解决办法
38
查看次数

根据要点爆炸一行

我有一个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)

我曾见过这样回答这个这个这对分隔爆炸柱基础,但我需要根据要点爆炸。

python regex pandas

0
推荐指数
1
解决办法
43
查看次数