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

首先,我对Python还是新手,已经搜索过了,但一直无法找到任何地方如何做到这一点(从一个新人的角度)

我有一条蟒蛇

我需要打印出索引、列名和值

假设我有以下数据帧

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,但不确定将我带到需要的位置所需的语法。工作完全符合我的需要。