如何从dataFrame中的字典中的每行中提取文本?

发布于 2025-02-07 22:37:09 字数 533 浏览 2 评论 0 原文

我一直在尝试长时间的方法,似乎无法找到一种从字符串中提取浏览器的简洁方法。它是DF中的一列,因此需要在

列看起来像该列的所有行上迭代该

0        [{'name': 'Chrome', 'version': '36.0.1985.143'}]
1        [{'name': 'Chrome', 'version': '34.0.1847.137'}]
2         [{'name': 'Chrome', 'version': '29.0.1547.76'}]
3        [{'name': 'Chrome', 'version': '33.0.1750.154'}]
4        [{'name': 'Chrome', 'version': '36.0.1985.143'}]

列,称为浏览器。

我尝试了以下内容。

df_agent_info['browser'].str.split("\[\{\'[a\-z]\'")

还有其他更糟糕的例子。感谢您的帮助。

I have been trying this for way to long and can't seem to figure out a concise way to extract the browser from the string. It is a column in a df so it needs to iterate over all the rows

The column looks like this

0        [{'name': 'Chrome', 'version': '36.0.1985.143'}]
1        [{'name': 'Chrome', 'version': '34.0.1847.137'}]
2         [{'name': 'Chrome', 'version': '29.0.1547.76'}]
3        [{'name': 'Chrome', 'version': '33.0.1750.154'}]
4        [{'name': 'Chrome', 'version': '36.0.1985.143'}]

The column is called browser.

I have tried the following.

df_agent_info['browser'].str.split("\[\{\'[a\-z]\'")

and other worse examples. I appreciate the help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

转瞬即逝 2025-02-14 22:37:09
import re

pattern = r"(?<='name': ')[\w ]+"

def match(x):
    if re.findall(pattern, x):
        return re.findall(pattern, x)[0]

df['browser'].apply(match)

(? >

import re

pattern = r"(?<='name': ')[\w ]+"

def match(x):
    if re.findall(pattern, x):
        return re.findall(pattern, x)[0]

df['browser'].apply(match)

(?<='name': ') is a positive lookbehind: it looks for matches that follow in this case 'name': '

恋你朝朝暮暮 2025-02-14 22:37:09

给定:

                                            browser
0  [{'name': 'Chrome', 'version': '36.0.1985.143'}]
1  [{'name': 'Chrome', 'version': '34.0.1847.137'}]
2   [{'name': 'Chrome', 'version': '29.0.1547.76'}]
3  [{'name': 'Chrome', 'version': '33.0.1750.154'}]
4  [{'name': 'Chrome', 'version': '36.0.1985.143'}]

让我们以Python的形式评估它们:

df.browser = df.browser.apply(eval)

现在我们可以轻松提取它:

df.browser = df.browser.str[0].str.get('name')
print(df)

输出:

  browser
0  Chrome
1  Chrome
2  Chrome
3  Chrome
4  Chrome

Given:

                                            browser
0  [{'name': 'Chrome', 'version': '36.0.1985.143'}]
1  [{'name': 'Chrome', 'version': '34.0.1847.137'}]
2   [{'name': 'Chrome', 'version': '29.0.1547.76'}]
3  [{'name': 'Chrome', 'version': '33.0.1750.154'}]
4  [{'name': 'Chrome', 'version': '36.0.1985.143'}]

Let's evaluate them as python:

df.browser = df.browser.apply(eval)

Now we can extract it easily:

df.browser = df.browser.str[0].str.get('name')
print(df)

Output:

  browser
0  Chrome
1  Chrome
2  Chrome
3  Chrome
4  Chrome
作妖 2025-02-14 22:37:09

首先将字符串转换为包含使用内置 ast.literal_eval 的dict的列表(比使用 eval )更安全,然后获取每个值的“名称”值使用 list_dict [0] ['name'] 使用字典。将此逻辑应用于浏览器列的每个字符串值,使用 series.apply

将所有内容放在一起:

import pandas as pd
import ast

df_agent_info = pd.DataFrame({
    'browser': ["[{'name': 'Chrome', 'version': '36.0.1985.143'}]",
                "[{'name': 'Chrome', 'version': '34.0.1847.137'}]",
                "[{'name': 'Chrome', 'version': '29.0.1547.76'}]",
                "[{'name': 'Chrome', 'version': '33.0.1750.154'}]",
                "[{'name': 'Chrome', 'version': '36.0.1985.143'}]"]
})

df_agent_info['browser'] = df_agent_info['browser'].apply(lambda s: ast.literal_eval(s)[0]['name'])

输出:

>>> df_agent_info['browser']

0    Chrome
1    Chrome
2    Chrome
3    Chrome
4    Chrome
Name: browser, dtype: object

First convert the strings to lists containing a dict using the built-in ast.literal_eval (it is safer than using eval), and then get the 'name' value of each dictionary using list_dict[0]['name']. Apply this logic to each string value of the browser column using Series.apply.

Putting all together:

import pandas as pd
import ast

df_agent_info = pd.DataFrame({
    'browser': ["[{'name': 'Chrome', 'version': '36.0.1985.143'}]",
                "[{'name': 'Chrome', 'version': '34.0.1847.137'}]",
                "[{'name': 'Chrome', 'version': '29.0.1547.76'}]",
                "[{'name': 'Chrome', 'version': '33.0.1750.154'}]",
                "[{'name': 'Chrome', 'version': '36.0.1985.143'}]"]
})

df_agent_info['browser'] = df_agent_info['browser'].apply(lambda s: ast.literal_eval(s)[0]['name'])

Output:

>>> df_agent_info['browser']

0    Chrome
1    Chrome
2    Chrome
3    Chrome
4    Chrome
Name: browser, dtype: object
数理化全能战士 2025-02-14 22:37:09

这是另一种方法,

,使用REGEX组

df['browser'].str.extract(r'(:\s).?([\w\s]*)')[1].str.strip()
0    Internet Explore
1              Chrome
2              Chrome
3              Chrome
4              Chrome
Name: 1, dtype: object
df = pd.DataFrame({
    'browser': ["[{'name': 'Internet Explore', 'version': '36.0.1985.143'}]",
                "[{'name': 'Chrome', 'version': '34.0.1847.137'}]",
                "[{'name': 'Chrome', 'version': '29.0.1547.76'}]",
                "[{'name': 'Chrome', 'version': '33.0.1750.154'}]",
                "[{'name': 'Chrome', 'version': '36.0.1985.143'}]"]
})

使用REGEX组 ”

here is another way to do it, One liner

using regex groups to match for content b/w the astrophes, by using regex groups

df['browser'].str.extract(r'(:\s).?([\w\s]*)')[1].str.strip()
0    Internet Explore
1              Chrome
2              Chrome
3              Chrome
4              Chrome
Name: 1, dtype: object
df = pd.DataFrame({
    'browser': ["[{'name': 'Internet Explore', 'version': '36.0.1985.143'}]",
                "[{'name': 'Chrome', 'version': '34.0.1847.137'}]",
                "[{'name': 'Chrome', 'version': '29.0.1547.76'}]",
                "[{'name': 'Chrome', 'version': '33.0.1750.154'}]",
                "[{'name': 'Chrome', 'version': '36.0.1985.143'}]"]
})

enter image description here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文