【问题标题】:DataFrame Index Created From Columns从列创建的 DataFrame 索引
【发布时间】:2019-12-31 14:52:04
【问题描述】:

我有一个数据框,我正在使用 TIA 来填充来自 Bloomberg 的数据。当我查看 df.index 时,我看到我打算作为列的数据作为多索引呈现给我。 df.columns 的输出如下:

索引([u'column1','u'column2'])

我已经尝试了各种 reset_index 迭代,但无法解决这种情况。

1) TIA 管理器会导致数据帧列作为索引读入吗?

2) 我怎样才能正确地将这些列识别为列而不是多索引?

我要解决的最终问题是,当我尝试将此列添加到 df2 时,df2 中该列的值显示为 NaT。如下:

df2['column3'] = df1['column1']

Produces:

df2
column1 column2 column3
1135     32       NaT
1351      43      NaT
35        13      NaT
135       13      NaT

【问题讨论】:

  • 你需要df = df.set_index([u'column1','u'column2'])吗?
  • 不,这似乎没有任何帮助。
  • 你介意用正确的格式编辑你的问题,或者阅读mcve吗?
  • 我的错谢谢
  • df2['column3'] = df1['column1'] 等 Pandas 操作自动对齐标签。所以如果df1的索引与df2的索引不匹配,那么这个赋值会将NaTNaNs放在df2['column3']中。它告诉您df1['column1'] 中没有与df2['column3'] 中的索引标签对应的值。

标签: pandas python-2.7 dataframe indexing


【解决方案1】:

从 cmets 看来,df1df2 具有完全不同的索引

In [396]: df1.index
Out[400]: Index(['Jan', 'Feb', 'Mar', 'Apr', 'May'], dtype='object')

In [401]: df2.index
Out[401]: Index(['One', 'Two', 'Three', 'Four', 'Five'], dtype='object')

但我们希望将值从df1 分配给df2保留顺序

通常,Pandas 操作会尝试根据索引(和/或列)标签自动对齐值。 在这种情况下,我们希望忽略标签。为此,请使用

df2['columns3'] = df1['column1'].values

df1['column1'].values 是一个 NumPy 数组。由于它没有索引,Pandas 只是将数组中的值按顺序分配给df2['columns3']。 如果右侧是列表或元组,则分配的行为方式相同。 请注意,这也依赖于等于len(df2)len(df1)


例如,

import pandas as pd

df1 = pd.DataFrame(
    {"column1": [1135, 1351, 35, 135, 0], "column2": [32, 43, 13, 13, 0]},
    index=[u"Jan", u"Feb", u"Mar", u"Apr", u"May"],
)
df2 = pd.DataFrame(
    {"column1": range(len(df1))}, index=[u"One", u"Two", u"Three", u"Four", u"Five"]
)
df2["columns3"] = df1["column1"].values
print(df2)

产量

       column1  columns3
One          0      1135
Two          1      1351
Three        2        35
Four         3       135
Five         4         0

或者,您可以使两个Indexs 相同,然后df2["columns3"] = df1["column1"] 将产生相同的结果(但现在因为索引标签正在对齐):

df1.index = df2.index
df2["columns3"] = df1["column1"]

使Indexs 匹配的另一种方法是重置两个 DataFrame 上的索引:

df1 = df1.reset_index()
df2 = df2.reset_index()
df2["columns3"] = df1["column1"]

reset_index 默认将旧索引移动到名为index 的列中(如果index.nameNone)。整数(从 0 开始)被分配为新的索引标签:

In [402]: df1.reset_index()
Out[410]: 
  index  column1  column2
0   Jan     1135       32
1   Feb     1351       43
2   Mar       35       13
3   Apr      135       13
4   May        0        0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2014-02-09
    • 2021-03-04
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2016-01-10
    • 1970-01-01
    相关资源
    最近更新 更多