我正在尝试使用 pandas 在我的数据框中添加一个包含一些值的新列,并让它重复相同的值,直到它到达索引的末尾:
我试过:
df['水果类型']=['香蕉','橙子','草莓']
它说:
ValueError:值的长度与索引的长度不匹配
**我的索引大约有 8000 行长,所以索引和新列值的数量不匹配
我希望该列看起来像:
水果类型: 香蕉 橘子 草莓 香蕉 橘子 草莓 香蕉 橘子 草莓
一段时间后我找到了解决方案:
df.insert(0, '水果类型', ['香蕉', '橙子','草莓']*int(((len(df))/3)))
0 代表列号,后跟列名,然后是列值。 *int... 将索引除以 3 并重复该数量的值。 感谢@acai 最后的乘数
请您参考如下方法:
方法一:
假设您的数据框有 10 个元素长(并且您想重复包含 3 个水果的列表)。
>>> df
column_a
0 a
1 b
2 c
3 d
4 f
5 e
6 x
7 s
8 n
9 i
使用 itertools.cycle,您可以将您的列表变成一个迭代器并循环遍历它直到数据帧结束:
from itertools import cycle
fruits = cycle(['Bananas','Oranges','Strawberries'])
df['Fruit_Type'] = [next(fruits) for fruit in range(len(df))]
>>> df
column_a Fruit_Type
0 a Bananas
1 b Oranges
2 c Strawberries
3 d Bananas
4 f Oranges
5 e Strawberries
6 x Bananas
7 s Oranges
8 n Strawberries
9 i Bananas
方法二
这是一个丑陋的 hack,您可以将其用作替代方法:
您可以使用 pandas.np.tile(它是 numpy.tile 的包装器)重复您的列表,但需要多次(使用 // 运算符),然后只需将列表添加到填充数据帧所需的第 n 个元素:
fruits = ['Bananas','Oranges','Strawberries']
df['Fruit Type']= pd.np.tile(fruits, len(df) // len(fruits)).tolist() + fruits[:len(df)%len(fruits)]
>>> df
column_a Fruit Type
0 a Bananas
1 b Oranges
2 c Strawberries
3 d Bananas
4 f Oranges
5 e Strawberries
6 x Bananas
7 s Oranges
8 n Strawberries
9 i Bananas
