Python 将数据帧拆分为N个片段
上下文 大家好,我正在尝试将我的数据集分割成180个独特的片段,然后通过地理编码器运行它(我的n约为180000,地理编码器有1000个批次限制)。我对Python非常陌生,但一些谷歌搜索让我在Python 将数据帧拆分为N个片段,python,for-loop,dataframe,macros,scikit-learn,Python,For Loop,Dataframe,Macros,Scikit Learn,上下文 大家好,我正在尝试将我的数据集分割成180个独特的片段,然后通过地理编码器运行它(我的n约为180000,地理编码器有1000个批次限制)。我对Python非常陌生,但一些谷歌搜索让我在sklearn.utils中找到了shuffle。它似乎做到了这一点,这里的代码实现了我想要的(概念上): 然而,我显然不想坐下来像这样手动构建180个数据帧,所以我正在寻找一种方法将其放入循环中。这是我的基本想法: start = 0 end = 1000 for a in range(1,180):
sklearn.utils
中找到了shuffle
。它似乎做到了这一点,这里的代码实现了我想要的(概念上):
然而,我显然不想坐下来像这样手动构建180个数据帧,所以我正在寻找一种方法将其放入循环中。这是我的基本想法:
start = 0
end = 1000
for a in range(1,180):
print(start, end, a)
start = start+1000
end = end+1000
以上方法很好
不起作用的代码
但是,当我尝试将实际拆分集成到循环中(而不仅仅是打印)时,它失败了。我很确定问题在于在命名数据帧时如何调用宏a
。但我不知道如何解决这个问题
from sklearn.utils import shuffle
df = shuffle(addresses)
start = 0
end = 1000
for a in range(1,180):
df_str(a) = df[start:end]
start = start+1000
end = end+1000
潜在修复:
df_str = dict()
for a in range(1,180):
df_str[a] = df[start:end]
start += 1000
end += 1000
以前可能出现的错误:
- 确保您定义了df_str。建议将其作为字典
- 似乎您将df_str作为带有圆括号的函数调用,而方括号更常用于元素访问
df_str = dict()
for a in range(1,180):
df_str[a] = df[start:end]
start += 1000
end += 1000
以前可能出现的错误:
- 确保您定义了df_str。建议将其作为字典
- 似乎您将df_str作为带有圆括号的函数调用,而方括号更常用于元素访问
exec()
函数来执行您创建的数据帧。这里,使用“format()
”方法更改数据帧的名称。
例如,如果a=1
则{}=data'.format(“df_%d”%(a))
将数据重命名为df_1
start = 0
end = 1000
df_str = dict()
for a in range(1,180):
df_str[a] = df.iloc[start:end]
data= df_str[a]
exec('{} = data'.format("df_%d" %(a)))
start = start+1000
end = end+1000
del data
如果希望数据帧的索引从0开始,则可以使用reset_index(drop=True)重置索引:
您可以尝试使用
exec()
函数来执行您创建的数据帧。这里,使用“format()
”方法更改数据帧的名称。
例如,如果a=1
则{}=data'.format(“df_%d”%(a))
将数据重命名为df_1
start = 0
end = 1000
df_str = dict()
for a in range(1,180):
df_str[a] = df.iloc[start:end]
data= df_str[a]
exec('{} = data'.format("df_%d" %(a)))
start = start+1000
end = end+1000
del data
如果希望数据帧的索引从0开始,则可以使用reset_index(drop=True)重置索引:
谢谢你的评论。不幸的是,这并没有解决我的问题。我的理解是,我正在定义df;我只想在字符串值df_2;上添加一个后缀,它接受整数
a
的字符串值。这就是我现在拥有的:start=0
end=1000
对于范围(1180)内的a:
b=str(a)
print(b)
df_b]=df[start:end]
start=start+1000
end=end+1000
但它返回TypeError:“str”对象不支持项分配
您最近的错误是因为您将df_uuu定义为字符串,并且字符串在python中不可更改。您可能希望像词典一样探索结构。然后您可以将第i个子数据帧存储为第i个条目。再次感谢您的评论。但它仍然没有解决我的问题。循环之后字典是空的。此外,我不认为将此代码与我的其他代码相匹配是可能的。我真的需要它们在数据帧中。你知道怎么做吗?可能是你感兴趣的。谢谢。我会更仔细地调查这件事。《你链接的帖子》建议,只有在我完全知道自己在做什么的情况下,我才会做我想做的事情;我当然不知道,但在我真正解决问题之前,我要花多少时间才能到达那个地方,这是一个权衡。非常有用,谢谢你的评论。不幸的是,这并没有解决我的问题。我的理解是,我正在定义df;我只想在字符串值df_2;上添加一个后缀,它接受整数a
的字符串值。这就是我现在拥有的:start=0
end=1000
对于范围(1180)内的a:
b=str(a)
print(b)
df_b]=df[start:end]
start=start+1000
end=end+1000
但它返回TypeError:“str”对象不支持项分配
您最近的错误是因为您将df_uuu定义为字符串,并且字符串在python中不可更改。您可能希望像词典一样探索结构。然后您可以将第i个子数据帧存储为第i个条目。再次感谢您的评论。但它仍然没有解决我的问题。循环之后字典是空的。此外,我不认为将此代码与我的其他代码相匹配是可能的。我真的需要它们在数据帧中。你知道怎么做吗?可能是你感兴趣的。谢谢。我会更仔细地调查这件事。《你链接的帖子》建议,只有在我完全知道自己在做什么的情况下,我才会做我想做的事情;我当然不知道,但在我真正解决问题之前,我要花多少时间才能到达那个地方,这是一个权衡。但是非常有用--值得赞赏的是,对代码的解释将有助于提高文章的质量。如果可能的话,请添加评论或解释。对代码的解释将有助于提高您文章的质量。如果可能,请添加评论或解释。