我希望我的问题不是另一个人的共同体,但我已经搜索了三天而且我找不到答案。
好的,我有一个包含两个标题的CSV文件。该文件包含有关酒店的信息(他们的名字),他们的成本(价格),他们的评级和他们所在的位置(区域1,2或3):
如您所见,第一行描述了该区域,而第二行是酒店名称,价格和评级。我想要的是重新排列文件并将其保存到新的CSV文件,其格式如下:
因此,有关酒店区域的信息已经有了自己的专栏。 seond行中的名称都是相同的。 有没有办法创造这个?当我们必须导入这些树状数据结构时,我有点新鲜。如果树有更多的节点(例如,如果我们按国家/地区开始,向下移动到区域,然后降到酒店名称,价格和评级),是否可以完成?可以用熊猫来完成吗?
答案 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)
我非常想要一些输入和建议,以使解决方案更优雅,或者为文件添加额外级别的标题。