使用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)