pandas dataframe.apply() 實現對某一行/列進行處理得到一個新行/新列

重點:
dataframe.apply(function,axis)對一行或一列作出一些操做(axis=1則爲對某一列進行操做,此時,apply函數每次將dataframe的一行傳給function,而後獲取返回值,將返回值放入一個series)
python去空格:字符串.strip()python

待解決:
dataframe.assign()應該怎麼用?json

(1)讀入數據後先把 城市 那一列城市名中的空格去掉api

對一列數據去空格的方法:app

def qukong(hang):
return hang['city'].strip()
dataframe['city']=dataframe.apply(qukong,axis=1) # axis=1表示對每一行作相同的操做
dataframe函數

###dataframe.apply用於對一行或一列作一些相同的操做url

(2)調用百度地圖API查詢各城市經緯度(查詢出的結果咱們用dict保存)翻譯

def p2l(name):
# 一、設置url和3個參數(輸出格式,key,要翻譯的地址)
url = 'http://api.map.baidu.com/geocoder/v2/'
output = 'json'
ak = 'sXZHPZahdMeK3Gy3uC7ZeRQrVbZDnP1G'
address = quote(name)code

# 二、拼接get請求(url?參數1=值1&參數2=值2&參數3=值3)
request = url + '?' + 'address=' + address + '&output=' + output + '&ak=' + akip

# 三、urlopen發送請求,得到response
response_file = urlopen(request)ci

# 四、讀取response字符串
response_str = response_file.read().decode()

# 五、str轉json
response_json = json.loads(response_str)

# 六、讀json
lat=response_json['result']['location']['lat']
lng=response_json['result']['location']['lng']

return [lat,lng]

list_place=list(set(dataframe['city']))
dict_loc={}
for elem in list_place:
dict_loc[elem]=p2l(elem)
dict_loc


(3)將查詢到的經緯度放入dataframe中
def add_lat(hang):
return dict_loc[hang['city']][0]

def add_lng(hang):
return dict_loc[hang['city']][1]

dataframe['city_lat']=dataframe.apply(add_lat,axis=1)
dataframe['city_lng']=dataframe.apply(add_lng,axis=1)

(4)從dataframe的日期一列中提取出 年、月、日 三個新列
def add_year(hang):
date=hang['date']
tmplist=date.split('/')
return tmplist[0]

def add_month(hang):
date=hang['date']
tmplist=date.split('/')
return tmplist[1]

def add_day(hang):
date=hang['date']
tmplist=date.split('/')
return tmplist[2]

dataframe['year']=dataframe.apply(add_year,axis=1)
dataframe['month']=dataframe.apply(add_month,axis=1)
dataframe['day']=dataframe.apply(add_day,axis=1)

(5)獲取星期幾
from datetime import datetime,date

dayOfWeek = datetime.now().weekday()
print dayOfWeek

dayOfWeek = datetime.today().weekday()print dayOfWeekdatetime類的weekday()方法能夠得到datetime是星期幾,注意weekday() 返回的是0-6是星期一到星期日

相關文章
相關標籤/搜索