如何使用for循环更新pandas数据框

2024-10-01 17:31:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一堆url存储在一个数据帧中,我正在通过一个url解析模块清理它们。我遇到的问题是,应该用清理后的url更新的“siteClean”字段更新的是整个列,而不是单个单元格。。。在

代码如下:

results = resultsX.copy(deep = True)
results = results.reset_index(drop = True)
results['siteClean'] = ''


from urlparse import urlsplit  
import re

for row in results.iterrows():
    #print row[1]
    url = row[1][1]
    if not re.match(r'http(s?)\:', url):
        url = 'http://' + url
    parsed = urlsplit(url)
    host = parsed.netloc
    #print host
    #row[1][1] = host
    #results[row][1] = host
    results['siteClean'] = host
    print results

Tags: 模块数据代码importretruehttphost
1条回答
网友
1楼 · 发布于 2024-10-01 17:31:27

一般来说,如果可以避免的话,最好避免在帧的行上循环。如果我正确地理解了您的问题,您需要从框架中查看单个列,并对该列的每个元素应用函数。然后将所有这些函数调用的结果放入原始帧的列中。也许是一个新的专栏,也许是旧专栏的替代品。这听起来像是pd.Series.map的工作。在

import pandas as pd
import numpy as np

np.random.seed(0)

n=10

df = pd.DataFrame({'num': np.random.randn(n),
                   'lett': np.random.choice(
                        list('abcdefghijklmnopqrstuvwxyz'),n)
                   })  

df如下所示:

df original

设置函数将单个字母分类为辅音或元音:

^{pr2}$

然后可以使用map生成一个新的Series,其条目是由指定函数转换的输入的条目。你可以把这个新的输出系列放在任何你喜欢的地方。它可以是一个新列(在旧的DataFrame或其他地方),也可以替换旧列。请注意,map仅适用于Series,因此请确保在使用前向下选择一列:

df['new'] = df['lett'].map(classify_letter)

给出:

df with col added

如果从原始设置开始并运行:

df['lett'] = df['lett'].map(classify_letter)

然后用新列替换旧列:

df with col replaced

相关问题 更多 >

    热门问题