将Pandas Dataframe与一个具有相同列的{CSV}文件合并

时间:2017-10-04 16:13:27

标签: python-2.7 pandas csv

我希望我的问题不是另一个人的共同体,但我已经搜索了三天而且我找不到答案。

好的,我有一个包含两个标题的CSV文件。该文件包含有关酒店的信息(他们的名字),他们的成本(价格),他们的评级和他们所在的位置(区域1,2或3):

The CSV file imported

如您所见,第一行描述了该区域,而第二行是酒店名称,价格和评级。我想要的是重新排列文件并将其保存到新的CSV文件,其格式如下:

The hopeful output

因此,有关酒店区域的信息已经有了自己的专栏。 seond行中的名称都是相同的。 有没有办法创造这个?当我们必须导入这些树状数据结构时,我有点新鲜。如果树有更多的节点(例如,如果我们按国家/地区开始,向下移动到区域,然后降到酒店名称,价格和评级),是否可以完成?可以用熊猫来完成吗?

2 个答案:

答案 0 :(得分:0)

首先,您可以将csv文件作为文本文件共享吗?这对尝试我自己的解决方案非常有帮助。从图片中记下数据似乎没那么高效。

其次,您是否已尝试通过自己编写脚本来实现此目的?或者你试过使用一些图书馆?您添加了标记pandas但在文中没有提及。任何特定的原因它应该是熊猫?

一种适用于这种情况的解决方案似乎很简单,只需使用切片即可。我想你的格式是相当具体的而不是标准的,所以图书馆可能没什么用。熊猫,例如允许多行作为标题,但它以不同的方式解释,请参阅pandas dataframe with 2-rows header and export to csv

解决方案的想法:

table = []
with open(my_csv_file) as f:
    for line in f:
        a1, p1, r1, a2, p2, r2, a3, p3, r3 = line[:-1].split(",")
        table.append([a1, p1, r1, "area1"])
        table.append([a2, p2, r2, "area2"])
        table.append([a3, p3, r3, "area3"])
# ... convert table into dataframe etc.

答案 1 :(得分:0)

好的,所以我为这个问题创建了一个可能的解决方案:

infile = csv.reader(infile, delimiter=';')
    out = []
    counter = 0
    i = 0
    k = 0
    names = []
    temp1 = 0
    for line in infile:
        temp = list(set(line))
        if counter == 0:
            names = line
            counter +=1
        elif counter == 1:
            k = len(list(set(line)))
            while i < len(line):
                line.insert(i+k, name)
                i += (k + 1)
            counter += 1
            out.append(line)
        else:
            i = 0
            ind = 0
            while i < len(line):
                line.insert(i+k, names[ind*k])
                i += (k + 1)
                ind +=1
            out.append(line)
    headers = out.pop(0)
    n = len(set(headers))
    table = pd.DataFrame(out, columns=headers)
    for i in range(0, len(table.columns)):
        if i ==0:
            temp1 = table.ix[:,n*i:n*(i+1)]
        else:
            temp1 = pd.concat([temp1, table.ix[:,n*i:n*(i+1)]], ignore_index=True)

我非常想要一些输入和建议,以使解决方案更优雅,或者为文件添加额外级别的标题。