Python:每 100 行大数据帧应用函数

我有一个大约 25,000 行的大型数据集。我正在尝试为我的每一项观察提取高程数据。但是,我一次只能发出 100 个请求。这意味着我需要大约 250 次拆分才能发出单独的请求!

我想知道是否有一种有效的方法来做到这一点?

我遇到过这种情况,但我不想重复 250 次并每次都应用该函数。

first_hun = pd.DataFrame()
rest = pd.DataFrame()

if df.shape[0] > 100: # len(df) > 100 would also work
    first_hun = df[:100]
    rest = df[100:]

以“粗略”的方式,这就是我正在尝试的:

for index,row in df.iterrows():
    
    # split df every 100 rows
        # apply elevation function (my_function)
        # store the 100 elevation values
        
    # concat the 250 elevation values so they're in the same list
    
# add list to original df
baitu1987 回答:Python:每 100 行大数据帧应用函数

您可以创建一个每 100 个值才递增的系列,并使用它对数据框进行分组。我正在使用一个较小的示例来适应屏幕并显示一些处理选项。

import pandas as pd
import numpy as np
df = pd.DataFrame({"FOO":list(range(50))})

# using each group
for idx,grp in df.groupby(np.arange(len(df))//5):
    print(idx,grp.FOO.values)

# using a pandas chained method
result = df.groupby(np.arange(len(df))//5).sum()
print(result)

# applying your own function to the group dataframes
df.groupby(np.arange(len(df))//5).apply(lambda df: print(df.FOO.values))
,

为了测试,让我们将源 DataFrame 创建为:

df = pd.DataFrame({'A': np.arange(101,122,2)})

假设您的函数为源的子集生成高程 数据框是:

def myFun(src,txt):
    return txt + src.A.astype(str)

然后您可以将新列生成为连续的串联 要求 df 的子集为:

tt = 'ABC'
n = len(tt)
df['Elev'] = pd.concat([ myFun(df[i::n],x) for i,x in enumerate(tt) ])

详情:

  • tt 是源字符串 - 附加到源列的字母列表。
  • n 是生成 df 的每个源子集的步骤。
  • for i,x in...tt 及其索引中检索连续的字母。 i 是源子集的编号,同时是起始子集的编号 dfx 中的点是添加到前面的字母 结果。
  • df[i::n] 选择源 DataFrame 的一个子集。
  • pd.concat 连接部分结果。

结果是:

      A  Elev
0   101  A101
1   103  B103
2   105  C105
3   107  A107
4   109  B109
5   111  C111
6   113  A113
7   115  B115
8   117  C117
9   119  A119
10  121  B121

如您所见,以 A 开头的值来自第一个 调用,从第二个开始以 B 开头的值,依此类推。

如果由于某种原因您不能使用列表推导式,您可以 在“普通”循环中执行此操作,例如:

res = []
for i,x in enumerate(tt):
    res.append(myFun(df[i::n],x))
df['Elev'] = pd.concat(res)
本文链接:https://www.f2er.com/4694.html

大家都在问