将Pandas DataFrame转换为字符串

5

我有一个pandas数据框,看起来像这样:

 Name  Number    Description
 car   5         red

我需要将其转化为字符串,看起来像这样:

"""Name: car

Number: 5 

Description: red"""

我是一名初学者,真的不知道该怎么做?我以后可能需要将其应用于一些类似的数据框中。


4
如果您的数据框中有多个条目,应该显示什么? - cglacet
然后我必须以某种方式仅打印一个行的信息。 例如,我有“car1”,“car2”,“car3”三个行。如果用户输入“car1”,我需要打印car1行。 - primadonna
3个回答

2
你可以使用iterrows来迭代你的数据帧行,对于每一行,你可以获取列并以你想要的方式打印结果。例如:
import pandas as pd

dtf = pd.DataFrame({
    "Name": ["car", "other"],
    "Number": [5, 6],
    "Description": ["red", "green"]
})

def stringify_dataframe(dtf):
    text = ""
    for i, row in dtf.iterrows():
        for col in dtf.columns.values:
            text += f"{col}: {row[col]}\n"
        text += "\n"
    return text

s = stringify_dataframe(dtf)

现在s包含以下内容:

>>> print(s)
Name: car
Number: 5
Description: red

Name: other
Number: 6
Description: green

非常感谢!但是我能否以某种方式将它放入一个字符串中,这样我就可以在不同的需要中使用它作为变量呢? - primadonna
好的,我会更新我的回答(您需要每个条目一个字符串还是一个大字符串?) - cglacet
我需要一个大字符串。 - primadonna

1

使用 apply 迭代 Dataframe 会更快。

import pandas as pd

df = pd.DataFrame({
    "Name": ["car", "other"],
    "Number": [5, 6],
    "Description": ["red", "green"]
})

s = '\n'.join(
        df.apply(
            lambda row: 
            '\n'.join(f'{head}: {val}' for head, val in row.iteritems()),
            axis=1))

当然,对于这个小数据集,使用for循环更快,但在我的机器上,一个有10行的数据集已经被更快地处理了。

print(f'{dtf.loc[i]}\n')``` 或者 ```for row in dtf.to_string(index = False).split('\n'): print(row)``` 可以使用,但不是作者要求的。 - Subham

0

另一种方法,

import pandas as pd

dtf = pd.DataFrame({
    "Name": ["car", "other"],
    "Number": [5, 6],
    "Description": ["red", "green"]
})


for row_index in range(len(dtf)):
    for col in dtf.columns:
        print(f"{col}: {dtf.loc[row_index, col]}")

Name: car
Number: 5
Description: red
Name: other
Number: 6
Description: green

[Program finished]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接