簡(jiǎn)介
np.loadtxt()用于從文本加載數(shù)據(jù)。
文本文件中的每一行必須含有相同的數(shù)據(jù)。
loadtxt(fname, dtype=<class 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)
-
fname要讀取的文件、文件名、或生成器。 -
dtype數(shù)據(jù)類(lèi)型,默認(rèn)float。 -
comments注釋。 -
delimiter分隔符,默認(rèn)是空格。 -
skiprows跳過(guò)前幾行讀取,默認(rèn)是0,必須是int整型。 -
usecols:要讀取哪些列,0是第一列。例如,usecols = (1,4,5)將提取第2,第5和第6列。默認(rèn)讀取所有列。 -
unpack如果為True,將分列讀取。
問(wèn)題
今天在ipython中讀取文件時(shí),
代碼為:
import numpy as np
x = np.loadtxt('C:\Users\sunshine\Desktop\scjym_3yNp3Gj\源數(shù)據(jù)\000001.csv',delimiter= ',',skiprows=(1),usecols= (1,4,6),unpack= False)```
出現(xiàn)下面的錯(cuò)誤:
```SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape```
編碼錯(cuò)誤,經(jīng)搜索問(wèn)題,發(fā)現(xiàn)采用如下解決方案:
r'C:\Users\expoperialed\Desktop\Python'
'C:\Users\expoperialed\Desktop\Python'
'C:/Users/expoperialed/Desktop/Python'
看到這里我就明白自己錯(cuò)在哪兒了。
***書(shū)寫(xiě)字符串有幾個(gè)需要注意的地方***:
####1. 長(zhǎng)字符串
非常長(zhǎng)的字符串,跨多行時(shí),可以使用***三個(gè)引號(hào)***代替普通引號(hào)。
即:
print('''This is a very long string.
it will continue.
and it's not over yet.
''hello,world''
still here.'''
可以注意到,使用這種方式時(shí),***字符串中可以同時(shí)使用單引號(hào)和雙引號(hào)***
#### 2.原始字符串
即`print(r'c:\nwhere')`
***反斜線有特殊的作用,它會(huì)轉(zhuǎn)義***,可以幫助我們?cè)谧址屑尤雴我?hào)和雙引號(hào)等不能直接加入的內(nèi)容。
***\n,換行符,可以存放于字符串中。***
以上代碼塊中,很顯然我們是想要一個(gè)路徑,而如果不使用原始字符串,我們就會(huì)得到
`c:
where`。
對(duì),為了防止這種情況,我們還可以使用反斜線進(jìn)行轉(zhuǎn)義,但是如果這個(gè)路徑很長(zhǎng),就像本文的路徑:
`C:\\\Users\\\sunshine\\\Desktop\\\scjym_3yNp3Gj\\\源數(shù)據(jù)\\\000001.csv`
使用雙斜線,就會(huì)很麻煩。
這時(shí),我們就可以用原始字符串。
***原始字符串以r開(kāi)頭。***
- 原始字符串結(jié)尾不能是反斜線。
- 如要結(jié)尾用反斜線,`print(r'C:\Programfiles\foo\bar' '\\')`即`C:\Programfiles\foo\bar\ `
在常規(guī)python字符串中,\U字符組合表示擴(kuò)展的Unicode代碼點(diǎn)轉(zhuǎn)義。
因此這里出現(xiàn)了錯(cuò)誤。
### python導(dǎo)入csv文件的三種方法
```python
#原始的方式
lines = [line.split(',') for line in open('iris.csv')]
df = [[float(x) for x in line[:4]] for line in lines[1:]]
#使用numpy包
import numpy as np
lines = np.loadtxt('iris.csv',delimiter=',',dtype='str')
df = lines[1:,:4].astype('float')
#使用pandas包
import pandas as pd
df = pd.read_csv('iris.csv')
df=df.ix[:,:4]
這三種方法中最后一種最簡(jiǎn)單,不過(guò)花費(fèi)時(shí)間比較長(zhǎng)一點(diǎn),第一種最麻煩,不過(guò)用時(shí)最短。這個(gè)可以通過(guò)ipython中的magic函數(shù)%%timeit來(lái)看。