当前位置: 首页 > 面试题库 >

在Pandas DataFrame的字符串中漂亮地打印换行符

蒋承教
2023-03-14
问题内容

我有一个Pandas DataFrame,其中的一列中包含字符串元素,而这些字符串元素包含我想实际打印的新行。但是它们只是出现\n在输出中。

也就是说,我要打印此:

  pos     bidder
0   1
1   2
2   3  <- alice
       <- bob
3   4

但这就是我得到的:

  pos            bidder
0   1
1   2
2   3  <- alice\n<- bob
3   4

我该如何完成我想要的?我可以使用DataFrame,还是必须恢复为手动打印填充的列一次一次?

这是我到目前为止的内容:

n = 4
output = pd.DataFrame({
    'pos': range(1, n+1),
    'bidder': [''] * n
})
bids = {'alice': 3, 'bob': 3}
used_pos = []
for bidder, pos in bids.items():
    if pos in used_pos:
        arrow = output.ix[pos, 'bidder']
        output.ix[pos, 'bidder'] = arrow + "\n<- %s" % bidder
    else:
        output.ix[pos, 'bidder'] = "<- %s" % bidder
print(output)

问题答案:

从pandas.DataFrame文档中:

具有标注轴(行和列)的二维大小可变的,可能是异构的表格数据结构。算术运算在行和列标签上对齐。可以认为是Series对象的类似dict的容器。大熊猫主要数据结构

因此,没有索引就不能有一行。换行符“ \ n”在DataFrame中不起作用。

您可以用空值覆盖“ pos”,然后在下一行输出下一个“ bidder”。但是,每次这样做时,index和’pos’都会被抵消。喜欢:

  pos    bidder
0   1          
1   2          
2   3  <- alice
3        <- bob
4   5

因此,如果一个名为“ frank”的竞标者的价值为4,它将覆盖“
bob”。当您添加更多时,这会引起问题。可能可以使用DataFrame并编写代码来解决此问题,但可能值得研究其他解决方案。

这是产生上面输出结构的代码。

import pandas as pd

n = 5
output = pd.DataFrame({'pos': range(1, n + 1),
                      'bidder': [''] * n},
                      columns=['pos', 'bidder'])
bids = {'alice': 3, 'bob': 3}
used_pos = []
for bidder, pos in bids.items():
    if pos in used_pos:
        output.ix[pos, 'bidder'] = "<- %s" % bidder
        output.ix[pos, 'pos'] = ''
    else:
        output.ix[pos - 1, 'bidder'] = "<- %s" % bidder
        used_pos.append(pos)
print(output)

编辑:

另一个选择是重组数据和输出。您可以将pos作为列,并为数据中的每个键/人创建一个新行。在下面的代码示例中,它打印出NaN值替换为空字符串的DataFrame。

import pandas as pd

data = {'johnny\nnewline': 2, 'alice': 3, 'bob': 3,
        'frank': 4, 'lisa': 1, 'tom': 8}
n = range(1, max(data.values()) + 1)

# Create DataFrame with columns = pos
output = pd.DataFrame(columns=n, index=[])

# Populate DataFrame with rows
for index, (bidder, pos) in enumerate(data.items()):
    output.loc[index, pos] = bidder

# Print the DataFrame and remove NaN to make it easier to read.
print(output.fillna(''))

# Fetch and print every element in column 2
for index in range(1, 5):
    print(output.loc[index, 2])

但是,这取决于您要如何处理数据。祝好运 :)



 类似资料:
  • 问题内容: 有人可以建议为什么会这样吗… 我有一些代码可以漂亮地打印一些JSON。为此,我要利用Gson库。 但是,尽管这样通常可以很好地工作,但某些字符似乎无法正确显示。这是演示该问题的简单代码: 上面代码的输出是: 我该如何解决以上问题? 问题答案: 使用此代码创建对象: 该方法 告诉 不要逃避HTML字符,如,,,,并造成你的麻烦一个单引号:。 请注意,如果您在不使用其他标签的情况下将此类未

  • 问题内容: 我有一个字典列表,带有来自SQL查询的classid,dept,coursenum,area和title字段。我想以人类可读的格式输出值。我在想每列顶部的列标题,然后在每列中适当的输出,即: (显然是使用标准对齐/间距) 我将如何在python中完成此操作? 问题答案: 标准的Python字符串格式可能就足够了。 要么 使用对齐,填充和精确格式说明符来获得最佳结果。

  • 问题内容: 这就是我为XML创建XStream实例的方式: 这是针对JSON的: 他们两个都漂亮地打印(缩进)输出。 如何要求XStream禁用漂亮打印? 问题答案: 在社区的一些帮助下,我找到了答案。 对于XML, 您必须更改序列化方式: 该行: 改为线 对于JSON, 您仅更改XStream的创建方式。因此,XStream的初始化更改为: 注意,使用4参数的JsonWriter构造函数。

  • 问题内容: 我正在尝试(没有成功) 仅 打印给定方法的内容。以下代码 几乎 可以解决问题: 用它运行 导致 我想要得到的只是 没有签名,评论等任何内容。我该怎么做? 问题答案: 答案已经很老了,涉及编写很多代码。 从asm v5开始,打印方法说明很简单: 在实现ClassVisitor时,只需覆盖visitMethod方法。这里是一个例子: TraceMethodVisitor将由classVis

  • 我正在寻找一种漂亮的方法来打印地图。 <代码>贴图。toString()给我:

  • 问题内容: 我有一个字符串,它表示要打印的非缩进XML。例如: 应该变成: 语法高亮不是必需的。为了解决该问题,我首先将XML转换为添加回车符和空格,然后使用pre标记输出XML。为了添加新行和空白,我编写了以下函数: 然后,我像这样调用该函数: 这对我来说很好用,但是当我编写上一个函数时,我认为必须有更好的方法。所以我的问题是,给定XML字符串以将其漂亮地打印在html页面中,您是否知道更好的方