python 使用過程問題總結
阿新 • • 發佈:2019-02-18
對於剛接觸Python,在使用過程中存在許多簡單或複雜的問題,本文總結Python使用過程中常見的一些問題,歡迎補充。
1 Python,使用pip提示 name pip is not defined
可能是安裝的時候沒有勾選pip,導致pip無法使用。
1.2 安裝Python時勾選了add to path 和pip,但是輸入pip還是提示
>>> pip
Traceback (most recent call last):
File “< stdin>”, line 1, in <module>
NameError: name ‘pip’ is not defined
在cmd命令符下輸入pip,而不是在Python直譯器中輸入pip。
2 python註釋
單行註釋:#
#註釋文字
多行註釋:兩個”’或者”“”括起來。
如:
'''第一行註釋
第二行註釋'''
3 name ‘xrange’ is not defined
在3.0以後的版本,取消了xrange,並 改名為range(),要想使用range()獲得一個list,必須顯式呼叫:
>>>list(range(5))
4 如何設定DataFram的行名和列名
直接賦值即可:
df.columns=[]
df.index.name=[]
5 將某一列設定為index
df.index=df['column_name ']
6 將時間戳(絕對時間)轉換成地區時間
兩種方法,分別得到不同資料型別的時間:
- 方法1 :先通過localtime函式轉化成當地時間,然後通過strftime按照某個格式轉化為字串,因此這種方法得到的是字串型別的時間。
eg:
import time
stamp=1499866461
time_loc=time.localtime(stamp)
time=time.strftime('%Y-%m-%d %H%M%S' ,time_loc)
- 方法2:引入 datetime,通過utcfromtimestamp函式直接轉換。這種方法得到的型別是datetime.datetime。
stamp=1499866461
time=datetime.utcfromtimestamp(stamp)
In [12]: from datetime import datetime
In [13]: stamp=1499866461
In [14]: time=datetime.utcfromtimestamp(stamp)
In [15]: type(time)
Out[15]: datetime.datetime
7 將字串型別的時間轉化成“時間戳”索引
引入了 pandas,構造DataFrame 型別資料。
In [18]: df=pd.DataFrame({'date':['2017/7/1','2017/7/2','2017/7/3'],'num':['1','2','3'],'char':['a','b','c']})
In [19]: df
Out[19]:
char date num
0 a 2017/7/1 1
1 b 2017/7/2 2
2 c 2017/7/3 3
In [21]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
char 3 non-null object
date 3 non-null object
num 3 non-null object
dtypes: object(3)
memory usage: 152.0+ bytes
接下來要做的事情是:1.把date資料型別變為時間型別datetime,2.變為索引
- 方法一:運用pandas的.to_datetime 和 .set_index
In [23]: df['date']=pd.to_datetime(df['date'])#轉換成datetime型別
In [24]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
char 3 non-null object
date 3 non-null datetime64[ns]
num 3 non-null object
dtypes: datetime64[ns](1), object(2)
memory usage: 152.0+ bytes
In [25]: df.set_index(df['date'])#設定為index
Out[25]:
char date num
date
2017-07-01 a 2017-07-01 1
2017-07-02 b 2017-07-02 2
2017-07-03 c 2017-07-03 3
- 方法2:運用函式.DatetimeIndex
In [29]: df.index=pd.DatetimeIndex(df['date'])
In [30]: df.index
Out[30]: DatetimeIndex(['2017-07-01', '2017-07-02', '2017-07-03'], dtype='datetime64[ns]', name='date', freq=None)
In [31]: df
Out[31]:
char date num
date
2017-07-01 a 2017/7/1 1
2017-07-02 b 2017/7/2 2
2017-07-03 c 2017/7/3 3
可以看到,DatetimeIndex函式直接轉換成Datetime型別的index,但是date資料項依然存在,因此,需要刪去:
del df['date']
8 raise error:OSError: Initializing from file failed
描述:pd.read_table(‘filepath’)出現錯誤,原因是不支援中文的路徑,
解決方法:
import os
pwd=os.getcwd()
os.chdir(os.path.dirname(filepath))
result= pd.read_table(os.path.basename(filepath))
os.chdir(pwd)
9 數字轉換成字串,方便進行索引,切片,匹配
解決方法:’%d’%x