用 pandas DataFrame 制作一个字符串
Making a string out of pandas DataFrame
我有 pandas DataFrame,它看起来像这样:
Name Number Description
car 5 red
我需要用它制作一个字符串,如下所示:
"""Name: car
Number: 5
Description: red"""
我是初学者,我真的不知道我该怎么做?稍后我可能需要将其应用于一些类似的 DataFrame。
您可以使用 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
使用 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 行的数据集已经处理得更快了。
另一种方法,
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]
我有 pandas DataFrame,它看起来像这样:
Name Number Description
car 5 red
我需要用它制作一个字符串,如下所示:
"""Name: car
Number: 5
Description: red"""
我是初学者,我真的不知道我该怎么做?稍后我可能需要将其应用于一些类似的 DataFrame。
您可以使用 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
使用 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 行的数据集已经处理得更快了。
另一种方法,
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]