So I create a 2d array of values in 3x11 structure and after that I created a dataframe of that array.
import pandas as pd
import numpy as np
systemYears = [0,4,8]
value1 = [12, 23, 34]
value2 = [13, 23, 343]
value3 = [16, 23, 34]
s = (3,11)
testArray = np.empty(s)
testArray[:] = np.nan
for i, j, k, l in zip(systemYears, value1, value2, value3):
testArray[0, i] = j
testArray[1, i] = k
testArray[2, i] = l
df = pd.DataFrame(testArray)
print(testArray)
print(df)
output:
testArray =
[[ 12. nan nan nan 23. nan nan nan 34. nan nan]
[ 13. nan nan nan 23. nan nan nan 343. nan nan]
[ 16. nan nan nan 23. nan nan nan 34. nan nan]]
df =
0 1 2 3 4 5 6 7 8 9 10
0 12.0 NaN NaN NaN 23.0 NaN NaN NaN 34.0 NaN NaN
1 13.0 NaN NaN NaN 23.0 NaN NaN NaN 343.0 NaN NaN
2 16.0 NaN NaN NaN 23.0 NaN NaN NaN 34.0 NaN NaN
I want to fill all the nan values using pandas's interpolation function. so i tried this method.
df.interpolation(method = linear)
but this doesn't work. If I don't create 2d array and keep the dataframe of 1d array of each row then it will work and gives the desired output but I want that in a single array.
testArray1 = np.empty(11)
testArray2 = np.empty(11)
testArray3 = np.empty(11)
testArray[:] = np.nan
testArray1[:] = np.nan
testArray2[:] = np.nan
testArray3[:] = np.nan
testArray1[0] = 12
testArray1[4] = 23
testArray1[8] = 34
testArray2[0] = 13
testArray2[4] = 23
testArray2[8] = 343
testArray3[0] = 16
testArray3[4] = 23
testArray3[8] = 34
df1 = pd.DataFrame(testArray1)
df2 = pd.DataFrame(testArray2)
df3 = pd.DataFrame(testArray3)
print(testArray1)
print(testArray2)
print(testArray3)
print(df1.interpolate())
print(df2.interpolate())
print(df3.interpolate())
this is actually giving the desired output but its a long method
[12. nan nan nan 23. nan nan nan 34. nan nan]
[ 13. nan nan nan 23. nan nan nan 343. nan nan]
[16. nan nan nan 23. nan nan nan 34. nan nan]
0
0 12.00
1 14.75
2 17.50
3 20.25
4 23.00
5 25.75
6 28.50
7 31.25
8 34.00
9 34.00
10 34.00
0
0 13.0
1 15.5
2 18.0
3 20.5
4 23.0
5 103.0
6 183.0
7 263.0
8 343.0
9 343.0
10 343.0
0
0 16.00
1 17.75
2 19.50
3 21.25
4 23.00
5 25.75
6 28.50
7 31.25
8 34.00
9 34.00
10 34.00
As you can see values are interpolated for each row. Can anyone please for the 2d array?