I have a dataframe that looks like this:
dict={'475':['NaN', 0.6, 'NaN', 'NaN', 'NaN', 'NaN'],
'575':['NaN', 'NaN', 0.11, 'NaN', 'NaN', 'NaN'],
'675':[0.223, 'NaN', 'NaN', 0.913, 'NaN', 'NaN'],
'1775':['NaN', 'NaN', 'NaN', 'NaN', 3.46, 'NaN'],
'1875':['NaN', 'NaN', 'NaN', 'NaN', 'NaN', 3.46]
}
df=pd.DataFrame(dict,index=['33', '35', '36', '13', '41', '1222'])
I want to print a statement for each row that says:
Location index_value
is within column value
of station column name
ie for the first row of the dataframe this would be:
Location 33 is within 0.223km of station 675
I have tried:
for index, column in df.iterrows():
print('Farm number ' + str(index) + ' is within 5km of ' + str(column))
but this prints all the index values each time, and I can't see where to go next.
I'd really appreciate some guidance.
You can replace NaN
strings to NaN
missing values and reshape by DataFrame.stack
, so missing values are removed and you can loop with MultiIndex Series
:
for (i, c), v in df.replace('NaN',np.nan).stack().items():
print(f"Location {i} is within {v}km of station {c}")
Location 33 is within 0.223km of station 675
Location 35 is within 0.6km of station 475
Location 36 is within 0.11km of station 575
Location 13 is within 0.913km of station 675
Location 41 is within 3.46km of station 1775
Location 1222 is within 3.46km of station 1875
You can also create DataFrame
:
df1 = df.replace('NaN',np.nan).stack().rename_axis(['i','c']).reset_index(name='v')
print (df1)
i c v
0 33 675 0.223
1 35 475 0.600
2 36 575 0.110
3 13 675 0.913
4 41 1775 3.460
5 1222 1875 3.460
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.