在现有的DataFrame中插入一个元素较少的数组作为新列



使用df.insert() function,我想向现有的DataFrame添加一个新的列,我在数组方面(没有任何索引)。我知道我的数组条目少于DataFrame行。这是有意的。我希望新列末尾的NaN值与DataFrame的大小匹配。然而,我不知道如何做到这一点,因为我得到

ValueError: Length of values (999) does not match length of index (1000)

任何想法如何填充我的数组与一个NaN(或NaT)值使其匹配?

编辑:下面是生成@Tranbi的答案问题的代码:

import numpy as np
import pandas as pd
from datetime import datetime,timedelta
times=np.random.randint(365*24*60,size=1000)
dates=datetime(2022,1,1)+timedelta(minutes=1)*times
data=pd.DataFrame({'date':np.sort(dates)})
data.set_index('date',inplace=True)
diff=(data.index[1:]-data.index[:-1]).array
pd.Series(diff).reindex(data.index)

您可以使用reindex与您的df索引作为参数:

import pandas as pd
data = {
"A": [420, 380, 390],
"B": [50, 40, 45]
}
C = [1, 2]
df = pd.DataFrame(data)
df.insert(2, "C", pd.Series(C).reindex(df.index))
print(df)

输出:

A   B    C
0  420  50  1.0
1  380  40  2.0
2  390  45  NaN

编辑:关于你的编辑,混乱来自于你将日期设置为索引的事实。你为什么不和Series合作呢?这样会更容易理解:

times=np.random.randint(365*24*60,size=1000)
dates=pd.Series(np.sort(datetime(2022,1,1)+timedelta(minutes=1)*times))
pd.Series(dates[1:].values - dates[:-1].values).reindex(dates.index)

Edit2:使用diff作为起点,我们用range(len(data))重新索引,以获得正确的行数:

import numpy as np
import pandas as pd
from datetime import datetime,timedelta
times=np.random.randint(365*24*60,size=1000)
dates=datetime(2022,1,1)+timedelta(minutes=1)*times
data=pd.DataFrame({'date':np.sort(dates)})
data.set_index('date',inplace=True)
diff = (data.index[1:]-data.index[:-1]).array
new_col = pd.Series(diff).reindex(range(len(data)))
data.insert(0, "new", new_col.values)

最新更新