1. 程式人生 > >python 使用過程問題總結

python 使用過程問題總結

對於剛接觸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