到目前为止,这是我的问题。我的熊猫版本是0.15。2,我正在开发Python2.7。我正在尝试将具有多索引列的数据框导出到excel,而不使用垂直索引。这充分概括了我的问题:
# imports
>>> import pandas as pd
>>> import numpy as np
# setting columns
>>> level_one = ['a']*3 + ['b']*3 + ['c']*3
>>> level_two = ['1', '2', '3']*3
>>> columns = [np.array(level_one), np.array(level_two)]
# making the dataframe
>>> df = pd.DataFrame(index=range(10), columns=columns)
>>> series = pd.Series({k:k**2 for k in range(10)})
>>> df[first_col] = series
>>> first_col = df.columns.tolist()[0]
>>> df
a b c
1 2 3 1 2 3 1 2 3
0 0 NaN NaN NaN NaN NaN NaN NaN NaN
1 1 NaN NaN NaN NaN NaN NaN NaN NaN
2 4 NaN NaN NaN NaN NaN NaN NaN NaN
3 9 NaN NaN NaN NaN NaN NaN NaN NaN
4 16 NaN NaN NaN NaN NaN NaN NaN NaN
5 25 NaN NaN NaN NaN NaN NaN NaN NaN
6 36 NaN NaN NaN NaN NaN NaN NaN NaN
7 49 NaN NaN NaN NaN NaN NaN NaN NaN
8 64 NaN NaN NaN NaN NaN NaN NaN NaN
9 81 NaN NaN NaN NaN NaN NaN NaN NaN
所以,到目前为止,一切正常。现在,当我导出到csv时,这两种方法都在数据完整性方面起作用(没有数据相对于标题的移动,尽管它会在一级中重复每个元素)。
>>> import os
>>> path = os.path.join(os.path.expanduser('~'), 'test.csv')
>>> df.to_csv(path)
>>> df.to_csv(path, index=False)
但是,对于ExcelWriter,它执行以下操作:
>>> import os
>>> path = os.path.join(os.path.expanduser('~'), 'test.xlsx')
>>> writer = pd.ExcelWriter(path)
>>> df.to_excel(writer, 'Sheet 1')
>>> df.to_excel(writer, 'Sheet 2', index=False)
>>> writer.save()
带索引
索引错误
如您所见,它消除了索引,但不在列标题中,从而导致数据移动。是否有修复或解决方法?在我的实际数据集中,实际的“索引”具有重复的元素和间隔符,因此不适合用作索引。
所以我在留档中找不到任何东西来解决这个问题,但是我想到了一个临时的解决方案。
import itertools
def pseudo_header(df):
'''Create a pseudo-header for the dataframe due to indexing
issues.
'''
# grab grouped columns
columns = df.columns
grouped = itertools.groupby(columns, key=lambda x: x[0])
grouped = [tuple(v) for k, v in grouped]
# grab col/index counters
index = DF.get_last_index(df)
counter = 0
# set rows
df.loc[index] = pd.Series(index=columns)
df.loc[index+1] = pd.Series(index=columns)
for group in grouped:
for idx, values in enumerate(group):
# grab indexing
column = columns[counter]
if idx == 0:
df.loc[index, column] = values[0]
df.loc[index+1, column] = values[1]
counter += 1
然后,我在索引和标题关闭的情况下导出。它可以工作,没有标题格式,但这是一个不错的修复。
目前,它只适用于2级标题,我可以进行概括,但出于我的需要,现在没有必要这样做。
我有一个像这样的数据框 我正试图重新塑造它,使它看起来像这样 我从尝试开始 但取消堆叠会导致以下值错误:“索引包含重复的条目,无法重塑”所以我在So上找到了这个建议,这允许我取消堆叠 但是当我用“ID”(即df=df.unstack(“ID”)解栈时,我的结束数据帧看起来像这样 我如何压缩它以获得我想要的输出?
如果我定义一个像这样的分层索引数据框: 内容如下所示: 我知道如何提取与给定列对应的数据。例如。对于列: 如何提取符合以下标准集的数据: , , , column , , 列 和 、、列、以及从开始的所有列 是偶数 (顺便说一句,我做了不止一次rtfm,但我真的觉得难以理解。)
鉴于此示例: 我想得到那些索引,其中col1: 预期结果将是一个向量。
我有两个数据集。 第一个,在市场变量中包含具有以下结构的一般市场趋势: 第二,在心情变量中,每一天都包含一些推文,在这个结构中带有同样的情绪: 所以,我想每天数一数有多少“熊市”和“牛市”情绪。它的工作原理,这是我的代码与注释: 结果如下: 所以它工作得很好,但我不明白为什么我不能访问或索引。 事实上,如果我尝试这样的事情: 我获得: 我错过了什么吗?谢啦