简体   繁体   中英

How do I write a for loop within a function to pickup values within a csv?

I have a file called sampleweather100 which has Latitudes and longtidudes of addresses. If i manually type in these lats and longs under the location list function, I get the output I desire. However, I want to write a function where it pulls out the output for all rows of my csv without me manually entering it:

import pandas as pd
my_cities = pd.read_csv('sampleweather100.csv')
from wwo_hist import retrieve_hist_data

#lat = -31.967819
#lng = 115.87718
#location_list = ["-31.967819,115.87718"]

frequency=24
start_date = '11-JAN-2018'
end_date = '11-JAN-2019'
api_key = 'MyKey'

location_list = ["('sampleweather100.csv')['Lat'],('sampleweather100.csv')['Long']"]
hist_weather_data = retrieve_hist_data(api_key,
                                location_list,
                                start_date,
                                end_date,
                                frequency,
                                location_label = False,
                                export_csv = True,
                                store_df = True)

My function location_list = ["('sampleweather100.csv')['Lat'],('sampleweather100.csv')['Long']"] does not work. Is there a better way or a forloop that will fetch each rows lat and long into that location_list function:

Reprex of dataset:

 my_cities
Out[89]: 
                City        Lat        Long
0          Lancaster  39.754545  -82.636371
1             Canton  40.851178  -81.470345
2             Edison  40.539561  -74.336307
3       East Walpole  42.160667  -71.213680
4             Dayton  39.270486 -119.577078
5    Fort Wainwright  64.825343 -147.673877
6            Crystal  45.056106  -93.350020
7            Medford  42.338916 -122.839771
8      Spring Valley  41.103816  -74.045399
9          Hillsdale  41.000879  -74.026089
10           Newyork  40.808582  -73.951553

Your way of building the list just does not make sense. You are using the filename of the csv, which is just a string and holds no reference to the file itself or the dataframe you have created from it.

Since you buildt a dataframe called my_cities from your csv using pandas , you need to extract your list of pairs from the dataframe my_cities :

location_list = [','.join([str(lat), str(lon)]) for lat, lon in zip(my_cities['Lat'], my_cities['Long'])]

This is the list you get with the above line using your sample dataframe:

['39.754545,-82.636371', '40.851178000000004,-81.470345',
 '40.539561,-74.33630699999999', '42.160667,-71.21368000000001',
 '39.270486,-119.577078', '64.825343,-147.673877', '45.056106,-93.35002',
 '42.338916,-122.839771', '41.103815999999995,-74.045399', 
 '41.000879,-74.026089', '40.808582,-73.951553']

You could use one of these to covert the dataframe into a list of comma-separated pairs:

location_list = [
    '{},{}'.format(lat, lon) 
    for i, (lat, lon) in my_cities.iterrows()
]

or

location_list = [
    '{},{}'.format(lat, lon) 
    for lat, lon in my_cities.values
]

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM