Python 迭代数据帧以打印索引、列和值
首先,我对Python还是新手,已经搜索过了,但一直无法找到任何地方如何做到这一点(从一个新人的角度) 我有一条蟒蛇 我需要打印出索引、列名和值 假设我有以下数据帧Python 迭代数据帧以打印索引、列和值,python,loops,pandas,dataframe,printing,Python,Loops,Pandas,Dataframe,Printing,首先,我对Python还是新手,已经搜索过了,但一直无法找到任何地方如何做到这一点(从一个新人的角度) 我有一条蟒蛇 我需要打印出索引、列名和值 假设我有以下数据帧 EAT DAILY WEEKLY YEARLY Fruit APPLE 2 5 200 ORANGE 1 3 100 BANANA 1 4 150 PEAR 0
EAT DAILY WEEKLY YEARLY
Fruit
APPLE 2 5 200
ORANGE 1 3 100
BANANA 1 4 150
PEAR 0 1 40
我需要把它打印出来,这样我就可以得到如下的结果,这样它就可以在数据帧中的每一行上迭代
Eat Apple Daily at least 2
Eat Apple Weekly at least 5
Eat Apple Yearly at least 200
Eat Orange Daily at least 1
Eat Orange Weekly at least 3
Eat Orange Yearly at least 100
..
...
....
我尝试过各种组合,但仍在学习中,因此非常感谢您的帮助
到目前为止我已经试过了
for row in test.iterrows():
index, data = row
print index , (data['column1'])
print index , (data['column2'])
print index , (data['column3'])
这将给我索引和值,但不是列加上我希望它能够迭代,无论使用了多少列或行。此外,我还需要能够插入需要动态的文本…您可以使用多索引
对系列进行重塑,然后使用格式进行迭代:
test = test.stack()
print (test)
Fruit EAT
APPLE DAILY 2
WEEKLY 5
YEARLY 200
ORANGE DAILY 1
WEEKLY 3
YEARLY 100
BANANA DAILY 1
WEEKLY 4
YEARLY 150
PEAR DAILY 0
WEEKLY 1
YEARLY 40
dtype: int64
for index, data in test.iteritems():
print (('Eat {} {} at least {}').format(index[0], index[1], data))
Eat APPLE DAILY at least 2
Eat APPLE WEEKLY at least 5
Eat APPLE YEARLY at least 200
Eat ORANGE DAILY at least 1
Eat ORANGE WEEKLY at least 3
Eat ORANGE YEARLY at least 100
Eat BANANA DAILY at least 1
Eat BANANA WEEKLY at least 4
Eat BANANA YEARLY at least 150
Eat PEAR DAILY at least 0
Eat PEAR WEEKLY at least 1
Eat PEAR YEARLY at least 40
但如果确实需要DataFrame
添加,然后通过以下方式循环:
字符串系列
f = 'Eat {Fruit} {EAT} at least {value}'.format
df.stack().reset_index(name='value').apply(lambda x: f(**x), 1)
0 Eat APPLE DAILY at least 2
1 Eat APPLE WEEKLY at least 5
2 Eat APPLE YEARLY at least 200
3 Eat ORANGE DAILY at least 1
4 Eat ORANGE WEEKLY at least 3
5 Eat ORANGE YEARLY at least 100
6 Eat BANANA DAILY at least 1
7 Eat BANANA WEEKLY at least 4
8 Eat BANANA YEARLY at least 150
9 Eat PEAR DAILY at least 0
10 Eat PEAR WEEKLY at least 1
11 Eat PEAR YEARLY at least 40
dtype: object
for idx, value in df.stack().iteritems():
print('Eat {0[0]} {0[1]} at least {1}'.format(idx, value))
Eat APPLE DAILY at least 2
Eat APPLE WEEKLY at least 5
Eat APPLE YEARLY at least 200
Eat ORANGE DAILY at least 1
Eat ORANGE WEEKLY at least 3
Eat ORANGE YEARLY at least 100
Eat BANANA DAILY at least 1
Eat BANANA WEEKLY at least 4
Eat BANANA YEARLY at least 150
Eat PEAR DAILY at least 0
Eat PEAR WEEKLY at least 1
Eat PEAR YEARLY at least 40
打印输出
f = 'Eat {Fruit} {EAT} at least {value}'.format
df.stack().reset_index(name='value').apply(lambda x: f(**x), 1)
0 Eat APPLE DAILY at least 2
1 Eat APPLE WEEKLY at least 5
2 Eat APPLE YEARLY at least 200
3 Eat ORANGE DAILY at least 1
4 Eat ORANGE WEEKLY at least 3
5 Eat ORANGE YEARLY at least 100
6 Eat BANANA DAILY at least 1
7 Eat BANANA WEEKLY at least 4
8 Eat BANANA YEARLY at least 150
9 Eat PEAR DAILY at least 0
10 Eat PEAR WEEKLY at least 1
11 Eat PEAR YEARLY at least 40
dtype: object
for idx, value in df.stack().iteritems():
print('Eat {0[0]} {0[1]} at least {1}'.format(idx, value))
Eat APPLE DAILY at least 2
Eat APPLE WEEKLY at least 5
Eat APPLE YEARLY at least 200
Eat ORANGE DAILY at least 1
Eat ORANGE WEEKLY at least 3
Eat ORANGE YEARLY at least 100
Eat BANANA DAILY at least 1
Eat BANANA WEEKLY at least 4
Eat BANANA YEARLY at least 150
Eat PEAR DAILY at least 0
Eat PEAR WEEKLY at least 1
Eat PEAR YEARLY at least 40
甚至可以考虑使用以下方法的非循环解决方案:
您将注意到该方法当前存在一个对正问题。当然,您可以使用字符串处理(strip()
,replace()
)来补救基本Python。我遇到了堆栈和interitems,但不确定将我带到需要的位置所需的语法。工作完全符合我的需要。