当前位置: 首页 > 面试题库 >

熊猫set_index不设置索引

穆宾白
2023-03-14
问题内容

假设我用两列b(一个DateTime)和c一个(整数)创建了一个熊猫DataFrame
。现在,我想根据第一列(b)中的值创建一个DatetimeIndex :

import pandas as pd
import datetime as dt

a=[1371215423523845, 1371215500149460, 1371215500273673, 1371215500296504, 1371215515568529, 1371215531603530, 1371215576463339, 1371215579939113, 1371215731215054, 1371215756231343, 1371215756417484, 1371215756519690, 1371215756551645, 1371215756578979, 1371215770164647, 1371215820891387, 1371215821305584, 1371215824925723, 1371215878061146, 1371215878173401, 1371215890324572, 1371215898024253, 1371215926634930, 1371215933513122, 1371216018210826, 1371216080844727, 1371216080930036, 1371216098471787, 1371216111858392, 1371216326271516, 1371216326357836, 1371216445401635, 1371216445401635, 1371216481057049, 1371216496791894, 1371216514691786, 1371216540337354, 1371216592180666, 1371216592339578, 1371216605823474, 1371216610332627, 1371216623042903, 1371216624749566, 1371216630631179, 1371216654267672, 1371216714011662, 1371216783761738, 1371216783858402, 1371216783858402, 1371216783899118, 1371216976339169, 1371216976589850, 1371217028278777, 1371217028560770, 1371217170996479, 1371217176184425, 1371217176318245, 1371217190349372, 1371217190394753, 1371217272797618, 1371217340235667, 1371217340358197, 1371217340433146, 1371217340463797, 1371217340490876, 1371217363797722, 1371217363797722, 1371217363890678, 1371217363922929, 1371217523548405, 1371217523548405, 1371217551181926, 1371217551181926, 1371217551262975, 1371217652579855, 1371218091071955, 1371218295006690, 1371218370005139, 1371218370133637, 1371218370133637, 1371218370158096, 1371218370262823, 1371218414896836, 1371218415013417, 1371218415050485, 1371218415050485, 1371218504396524, 1371218504396524, 1371218504481537, 1371218504517462, 1371218586980079, 1371218719953887, 1371218720621245, 1371218738776732, 1371218937926310, 1371218954785466, 1371218985347070, 1371218985421615, 1371219039790991, 1371219171650043]
b=[dt.datetime.fromtimestamp(t/1000000.) for t in a]
c = {'b':b, 'c':a[:]}


df = pd.DataFrame(c)
df.set_index(pd.DatetimeIndex(df['b']))
print df

一切似乎都正常,除了我打印DataFrame时,它说它具有Int64Index。

<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 2 columns):
b    100  non-null values
c    100  non-null values
dtypes: datetime64[ns](1), int64(1)

我是在做错事还是不正确理解Indeces的概念?


问题答案:

set_index没有就位(除非您通过inplace=True)。否则一切正确

In [7]: df = df.set_index(pd.DatetimeIndex(df['b']))

In [8]: df
Out[8]: 
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 100 entries, 2013-06-14 09:10:23.523845 to 2013-06-14 10:12:51.650043
Data columns (total 2 columns):
b    100  non-null values
c    100  non-null values
dtypes: datetime64[ns](1), int64(1)

同样作为参考,在即将到来的0.12版本(下周)中,您可以传递unit=us以指定自纪元以来的微秒单位

In [13]: pd.to_datetime(a,unit='us')
Out[13]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-06-14 13:10:23.523845, ..., 2013-06-14 14:12:51.650043]
Length: 100, Freq: None, Timezone: None


 类似资料:
  • 问题内容: 我这样制作数据框。 我想通过使用一些熊猫方法将索引转换为此(例如set_index,stack 、、) 我怎样才能做到这一点? 问题答案: 我认为你需要与重塑,然后交换在水平由列由去年的排序列: 用另一种解决方案和:

  • 问题内容: 我有一个数据框,正在尝试将索引设置为“时间戳”列。当前索引只是一个行号。时间戳格式的示例是: 2015-09-03 16:35:00 我试图设置索引: 我没有收到错误,但是当我打印数据框时,索引仍然是行号。如何使用时间戳记作为索引? 问题答案: 您需要指定,或将结果分配给变量。尝试:

  • 问题内容: 我有两列,将集存储在数据框中。 我想使用快速向量化操作在两列上执行集合并集 但是错误使我无法这样做,因为我在两列中都输入了内容。 有解决这个问题的好方法吗? 问题答案: 对于这些操作,纯Python可能更有效。 如果我们可以使用,则可能会花费一半的时间(继承可能不值得): 时序的DataFrame:

  • 我想用替换大于任意数字(本例中为100)的

  • 查看以下: 问题是它不会在ipython笔记本中按默认值打印所有行,但我必须切片才能查看结果行。即使以下选项也不会更改输出: 有人知道如何显示整个阵列吗?

  • 我不确定我在哪里误入歧途,但我似乎无法重置数据帧上的索引。 当我运行时,我得到下面的输出: 如您所见,数据帧是一个切片,因此索引超出了范围。我想做的是重置此数据帧的索引。所以我运行。这将产生以下结果: 这看起来像是一个新的索引,但事实并非如此。运行同样,索引仍然相同。试图使用或会导致数据帧出现问题。 如何才能真正重置索引?