Here is the sample dataFrame:
data = np.matrix([[4,3,6,4,1,7,5,5], [1,2,3,6,4,2,4,9], ['a',np.nan, np.nan, 'b', np.nan, 'c', np.nan, 'd'],[1,np.nan, np.nan, 2, np.nan, 2, np.nan, 2]]).T
data = pd.DataFrame(data)
>>> data
0 1 2 3
0 4 1 a 1
1 3 2 nan nan
2 6 3 nan nan
3 4 6 b 2
4 1 4 nan nan
5 7 2 c 2
6 5 4 nan nan
7 5 9 d 2
>>> data.dtypes
0 object
1 object
2 object
3 object
dtype: object
As you can see, the dtypes
for some of the columns are object
. They are not float
, or int
.
If I type in, data.ffill()
, to the Console, it doesn't do anything. But, If I try data[3] = data[3].astype(float).ffill()
it changes data
to:
0 1 2 3
0 4 1 a 1.0
1 3 2 nan 1.0
2 6 3 nan 1.0
3 4 6 b 2.0
4 1 4 nan 2.0
5 7 2 c 2.0
6 5 4 nan 2.0
7 5 9 d 2.0
Apparently pd.ffill() works only on numeric columns, but not on string columns. data[2] = data[2].astype(str).ffill()
didn't change anything. How can I forward fill on rows with dtype=object
?
Here is the output I want:
0 1 2 3
0 4 1 a 1.0
1 3 2 a 1.0
2 6 3 a 1.0
3 4 6 b 2.0
4 1 4 b 2.0
5 7 2 c 2.0
- I extracted data from csv using pd.read_csv(). In the original csv file, some columns of numeric values and some have string columns