1

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?

Vesper
  • 795
  • 1
  • 9
  • 21
  • 3
    I think you need to specify the interpolation along rows, not columns: `df.interpolate('linear', axis=1)`. (The default for most methods is `axis=0`) – ALollz Jul 15 '20 at 17:02

0 Answers0