【问题标题】:How to create a neat table from ugly rows of data?如何从丑陋的数据行创建一个整洁的表格?
【发布时间】:2020-02-12 05:50:27
【问题描述】:

例如,我从 excel 中导入了一个数据集,看起来像这样,只有一列多行,包含重复的信息,如姓名、电话和标题:


---------
0 名称1
1 部电话1
2 标题1
3 名称2
4 电话2
5 标题2
6 姓名3
7 电话3
8 标题3

我想以此构建一个包含 3 列名称、电话、标题的表格 并将该信息提取到这个新表中。如:

姓名电话标题
姓名 1 电话 1 标题 1
姓名2 电话2 标题2

等等...我应该如何解决这个问题?我正在将 Python 与 Jupyter Notebook 一起使用。

++ 所以在这里,所有的名字/电话/头衔都是不同的词,例如,名字可以是 Sarah Kim、Andrew m。白色,迈克·耶斯曼。电话可以是 111-222-3333、333-444-5555 等。而且我有超过 500 多行,所以我的第一次尝试是尝试使用 REGEX 来分隔姓名、电话和标题。我正在使用 pandas 数据框,我想学习如何解决这样的问题,而不仅仅是获取代码。

【问题讨论】:

  • 根据您自己的研究,到目前为止您有哪些尝试?你的结果是什么?
  • 这能回答你的问题吗? Printing Lists as Tabular Data
  • @G.Anderson 对于如何处理这样的问题,我什至没有太多想法。我不是要代码答案,而是要如何思考以及要考虑什么(?)。
  • 我认为这太宽泛/模糊了。请参阅:How to Askhelp center
  • 如果你想要对齐的列,那么给定列中的所有值都需要具有相同的宽度。使用 Python 格式使列中的每个值占用相同数量的字符,并在需要的地方用空格填充。

标签: python data-manipulation


【解决方案1】:

您可以使用 pandas 创建基本表。定义每个变量,在本例中使用字符串数组。然后使用 pd.DataFrame 为每一列命名,然后分配值。

import pandas as pd

names = ('name1', 'name2')
phones = ('phone1', 'phone2')
titles = ('title1', 'title2')

example = pd.DataFrame({
    "Names": names,
    "Phones": phones,
    "Titles": titles,
})
example

输出:

    Names   Phones  Titles
0   name1   phone1  title1
1   name2   phone2  title2

【讨论】:

  • 但是,我将在表中包含实际姓名、电话号码和头衔,而不是 name1、name2 的简化版本。而且行数超过500....会有更好的方法吗?我正在考虑使用正则表达式,但不确定这是否明智
  • 他说是从 Excel 导入的,所以你的回答与他的问题无关。
【解决方案2】:

这是一个不使用 pandas 的解决方案(虽然 pandas 可能会更快/更高效)

data = ['name1', 'phone1', 'title1', 'name2', 'phone2', 'title2']

print("Name Phone Title")
for name, phone, title in zip(*[iter(data)]*3):
  print(name, phone, title)

结果

Name Phone Title
name1 phone1 title1
name2 phone2 title2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多