【问题标题】:convert dataframe column from list of strings to tuples将数据框列从字符串列表转换为元组
【发布时间】:2020-03-13 11:12:38
【问题描述】:

我在列表中有网址。这是数据框的一个元素。我需要将这些字符串列表中的每一个都转换为像元组这样的可散列类型。我用逗号读过 tuple(a,) ,在转换时保留列表中的字符串。应用于一整列数据框时,我似乎无法让它工作。可能缺少一些简单的东西

df['url'] = tuple(df['url',]) ...不起作用

flatframe['url'] = flatframe['url'].apply(tuple) ...有效但不保留字符串

这里有几行数据:

index artist ranking song songurl songtext artisturl year

2280    (Lady Antebellum,)  81  [Bartender (Lady Antebellum song)]  [/wiki/Bartender_(Lady_Antebellum_song)]    "Bartender (Lady Antebellum song)"  /wiki/Lady_Antebellum   2014

2281    (Naughty Boy, Sam Smith)    82  [La La La (Naughty Boy song)]   [/wiki/La_La_La_(Naughty_Boy_song)] "La La La (Naughty Boy song)"   [/wiki/Naughty_Boy, /wiki/Sam_Smith_(singer)]   2014

2282    (Robin Thicke, T.I., Pharrell Williams) 83  [Blurred Lines] [/wiki/Blurred_Lines]   "Blurred Lines" [/wiki/Robin_Thicke, /wiki/T.I., /wiki/Pharrel...   2014

2283    (Lady Gaga, R. Kelly)   84  [Do What U Want]    [/wiki/Do_What_U_Want]  "Do What U Want"    [/wiki/Lady_Gaga, /wiki/R._Kelly]   2014

【问题讨论】:

  • 你能提供一个样本数据给我们看看吗?
  • 或许,这会有所帮助...stackoverflow.com/questions/37994791/…
  • 你能提供一个你期望的输出样本吗?
  • 我想将具有多个 url 的单元格中的 url 列表转换为 url 元组 [/wiki, /wiki, /wiki] 到 ('/wiki', '/wiki' , '/wiki') 前者是不可变的

标签: python pandas dataframe tuples


【解决方案1】:

假设您的数据框是这样的:

import pandas as pd
pd.set_printoptions(max_columns=10)
df = pd.DataFrame(
[[2280, ("Lady Antebellum"),  81,  ["Bartender (Lady Antebellum song)"],  ["/wiki/Bartender_(Lady_Antebellum_song)"],    "Bartender (Lady Antebellum song)",  "/wiki/Lady_Antebellum",  2014],
[2281, "(Naughty Boy, Sam Smith)",    82,  ["La La La (Naughty Boy song)"],   ["/wiki/La_La_La_(Naughty_Boy_song)"], "La La La (Naughty Boy song)",   ["/wiki/Naughty_Boy", "/wiki/Sam_Smith_(singer)"],   2014],
[2282, "(Robin Thicke, T.I., Pharrell Williams)", 83,  ["Blurred Lines"], ["/wiki/Blurred_Lines"],   "Blurred Lines", ["/wiki/Robin_Thicke", "/wiki/T.I. /wiki/Pharrel"],   2014],
[2283, "(Lady Gaga, R. Kelly)",   84,  ["Do What U Want"],    ["/wiki/Do_What_U_Want"],  "Do What U Want",    ["/wiki/Lady_Gaga", "/wiki/R._Kelly"],   2014]],
columns = ["index", "artist", "ranking", "song", "songurl", "songtext", "artisturl", "year"])

那你可以试试:

df.artisturl = df.artisturl.apply(lambda x: tuple(x) if type(x)!= str else tuple([x]))

这将仅将元组应用于非字符串的条目,并转换为列表,然后转换为字符串的元组条目。就好像它是一个字符串并且你应用元组一样,它会给出一个元组,每个字符作为条目。

您的专栏artisturl 将如下所示:

>>> df.artisturl
0                           ('/wiki/Lady_Antebellum',)
1    ('/wiki/Naughty_Boy', '/wiki/Sam_Smith_(singer)')
2    ('/wiki/Robin_Thicke', '/wiki/T.I. /wiki/Pharr...
3                ('/wiki/Lady_Gaga', '/wiki/R._Kelly')
Name: artisturl

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多