官方文檔: https://docs.python.org/2/library/collections.html#collections.Counterhtml
from collections import Counter
test_list = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = Counter(test_list)
# 返回值: Counter({1: 7, 2: 5, 3: 3})
value = counter[2]
# 返回值: 5
# 實際上以上引入等價於如下代碼:
counter = {i: test_list.count(i) for i in set(test_list)}
# 返回值: {1: 7, 2: 5, 3: 3}
複製代碼
from collections import Counter
test_list = [1, 2, 3, 3, 2, 1, 1, 1, 2, 2, 3, 1, 2, 1, 1]
counter = Counter(lst)
result = counter.most_common(2) # 統計TOP2
# 返回值: [(1, 7), (2, 5)]
複製代碼
from collections import Counter
test1 = Counter(a=4, b=2, c=0, d=-2)
test2 = Counter(a=1, b=2, c=3, d=4, e=4)
test1.subtract(test2)
# 返回值:
# test1: Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
# test2: Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
複製代碼
from collections import Counter
test1 = Counter(a=4, b=2, c=0, d=-2)
test2 = Counter(a=1, b=2, c=3, d=4, e=4)
result1 = test1 + test2 # counter相加: 相同Key值相加, 不一樣Key保留
result2 = test1 - test2 # counter相減: 相同Key值相減, 不一樣Key用0代替再相減, 結果只保留value是正值的key
result3 = test1 & test2 # counter交集: 取相同key, value取小
result4 = test1 | test2 # counter並集: 取全部key, key相同時value取大
# 返回值:
# result1: Counter({'a': 5, 'b': 4, 'e': 4, 'c': 3, 'd': 2})
# result2: Counter({'a': 3})
# result3: Counter({'b': 2, 'a': 1})
# result4: Counter({'a': 4, 'd': 4, 'e': 4, 'c': 3, 'b': 2})
複製代碼
官方文檔: https://docs.python.org/2/library/collections.html#collections.defaultdictpython
from collections import defaultdict
test = defaultdict(str)
test['key1'] = '1'
test['key2'] = '2'
# 獲取不存在的Key將使用實例化的類型所對應的空對象做爲初始化數據
# str -> "" | int -> 0 | list -> list() | dict -> dict() | set -> set() | tuple -> tuple()
v = test['medusa']
# 返回值:
# v: ""
# test: defaultdict(<class 'str'>, {'key1': '1', 'key2': '2', 'medusa': ''})
複製代碼
官方文檔: https://docs.python.org/2/library/collections.html#collections.dequesql
# First-In-First-Out,FIFO
from collections import deque
my_queue = deque(maxlen=10)
for i in range(10):
my_queue.append(i+1)
print(my_queue)
# 輸出: deque([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], maxlen=10)
print(my_queue.popleft())
# 輸出: 1
for i in range(5):
my_queue.append(i+1)
print(my_qeueu)
# 輸出: deque([6, 7, 8, 9, 10, 1, 2, 3, 4, 5], maxlen=10)
複製代碼
官方文檔: https://docs.python.org/2/library/collections.html#collections.namedtuplejson
from collections import namedtuple
# 建立數據模板, 名稱爲Person, 數據模板域名稱 name | description | forever | size
Person = namedtuple('Person', 'name description forever size')
# 使用模板建立兩個索引對象, 兩種方法等價
Medusa = Person(name='Medusa', description='Medusa blog', forever=True, size='Max')
You = Person._make(['You', '...', True, 'Max'])
print(Medusa)
print(You)
# 輸出:
# Medusa: Person(name='Medusa', description='Medusa blog', forever=True, size='Max')
# You: Person(name='You', description='...', forever=True, size='Max')
# 修改屬性值, 實際上生成了新的對象
update_Medusa = Medusa._replace(description='https://juejin.im/user/5da32395e51d4578200cc9c5')
print(Medusa)
print(update_Medusa)
# 輸出:
# Medusa: Person(name='Medusa', description='Medusa blog', forever=True, size='Max')
# update_Medusa: Person(name='Medusa', description='https://juejin.im/user/5da32395e51d4578200cc9c5', forever=True, size='Max')
# 輸出字典
print(Medusa._asdict())
# 輸出: OrderedDict([('name', 'Medusa'), ('description', 'Medusa blog'), ('forever', True), ('size', 'Max')])
複製代碼
官方文檔: https://www.pypandas.cn/app
import pandas as pd
df = pd.DataFrame(pd.read_csv('csv_name.csv',header=1))
df = pd.DataFrame(pd.read_excel('xlsx_name.xlsx'))
複製代碼
Read | Write |
---|---|
read_csv | to_csv |
read_excel | to_excel |
read_hdf | to_hdf |
read_sql | to_sql |
read_json | to_json |
read_msgpack(experimental) | to_msgpack(experimental) |
read_html | to_html |
read_gbq (experimental) | to_gbq (experimental) |
read_stata | to_stata |
read_sas | - |
read_clipboard | to_clipboard |
read_pickle | to_pickle |
str
支持字符串或者任何可讀文件對象, 包括UEL類型的文件str
指定數據分隔符, 默認嘗試","分隔, 分隔符長於一個字符且不是"\s+", 將使用python的語法分析器, 而且忽略數據中的逗號str
定界符, 備選分隔符, 若是指定該參數, 則sep參數失效bool
指定空格是否做爲分隔符使用, 等效於設定sep="\s+", 若是這個參數設定爲"True", 則delimiter參數失效int or list of ints
指定行數編號做爲列名, 若是文件中沒有列名則默認爲0, 不然設置爲None, 若是明確設定header=0就會替換掉原來存在列名, 若是是list表示將文件中的這些行做爲列標題(意味着每一列有多個標題), 介於中間的行將被忽略掉, 注意:若是skip_blank_lines=True, 那麼header參數忽略註釋行和空行, 因此header=0表示第一行數據而不是文件的第一行array like
用於結果的列名列表, 若數據文件中沒有列標題行則須要執行header=None, 默認列表中不能出現重複, 除非設定參數mangle_dupe_cols=Trueint or sequence or False
用做行索引的列編號或者列名, 若是給定一個序列則有多個行索引, 若是文件不規則, 行尾有分隔符, 則能夠設定index_col=False來使pandas不適用第一列做爲行索引array-like
返回一個數據子集, 該列表中的值必須能夠對應到文件中的位置(數字能夠對應到指定的列)或者是字符傳爲文件中的列名, 例如:usecols有效參數多是 [0,1,2]或者是 [‘foo’, ‘bar’, ‘baz’], 使用這個參數能夠加快加載速度並下降內存消耗。bool
不支持使用:該參數會在將來版本移除, 請使用pd.read_csv(...).to_records()替代, 返回一個Numpy的recarray來替代DataFrame, 若是該參數設定爲True, 將會優先squeeze參數使用, 而且行索引將再也不可用, 索引列也將被忽略bool
若是文件值包含一列, 則返回一個Seriesstr
在沒有列標題時, 給列添加前綴bool
重複的列, 將多個重複列表示爲"X.0"..."X.N", 不然將列覆蓋。Type name or dict of column -> type
每列數據的數據類型"c" or "python"
指定分析引擎, C引擎快, 可是Python引擎功能更加完備dict
列轉換函數的字典, key能夠是列名或者列的序號list
Values to consider as Truelist
, Values to consider as Falsebool
忽略分隔符後的空白list-like or integer
須要忽略的行數(從文件開始處算), 或須要跳過的行號列表int
從文件尾部開始忽略int
從文件尾部開始忽略(不推薦使用)int
須要讀取的行數(從文件頭開始算起)scalar, str, list-like, or dict
一組用於替換NA/NaN的值, 若是傳遞, 須要制定特定列的空值。默認爲"1.#IND", "1.#QNAN", "N/A", "NA", "NULL", "NaN", "nan"bool
若是指定na_values參數, 而且keep_default_na=False, 那麼默認的NaN將被覆蓋, 不然添加bool
是否檢查丟失值(空字符串或者是空值), 對於大文件來講數據集中沒有空值, 設定na_filter=False能夠提高讀取速度bool
是否打印各類解析器的輸出信息bool
若是爲True, 則跳過空行, 不然記爲NaNboolean or list of ints or names or list of lists or dict
bool
若是設定爲True而且parse_dates可用, 那麼pandas將嘗試轉換爲日期類型, 若是能夠轉換, 轉換方法並解析。在某些狀況下會快5~10倍bool
若是鏈接多列解析日期, 則保持參與鏈接的列function
用於解析日期的函數, 默認使用dateutil.parser.parser來作轉換, Pandas嘗試使用三種不一樣的方式解析, 若是遇到問題則使用下一種方式
bool
DD/MM格式的日期類型bool
返回一個TextFileReader對象, 以便逐塊處理文件int
文件塊的大小"infer" or "gzip" or "bz2" or "zip" or "xz" or None
直接使用磁盤上的壓縮文件, 若是使用infer參數, 將使用指定的方式解壓指定後綴的文件str
千分位分割符str
字符中的小數點str
Specifies which converter the C engine should use for floating-point values. The options are None for the ordinary converter, high for the high-precision converter, and round_trip for the round-trip converterstr
行分割符, 只在C解析器下使用str
引號, 用做標識開始和解釋的字符, 引號內的分割符將被忽略int or csv.QUOTE_* instance
控制csv中的引號常量, 可選 QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)bool
雙引號, 當單引號已經被定義, 而且quoting 參數不是QUOTE_NONE的時候, 使用雙引號表示引號內的元素做爲一個元素使用str
當quoting 爲QUOTE_NONE時, 指定一個字符使的不受分隔符限值str
標識着多餘的行不被解析, 若是該字符出如今行首, 這一行將被所有忽略, 這個參數只能是一個字符, 空行(就像skip_blank_lines=True)註釋行被header和skiprows忽略同樣, 若是指定comment='#' 解析"#empty\na,b,c\n1,2,3" 以header=0 那麼返回結果將是以’a,b,c'做爲headerstr
指定字符集類型, 一般指定爲'utf-8'str or csv.Dialect instance
若是沒有指定特定的語言, 若是sep大於一個字符則忽略bool
Leave a list of tuples on columns as is (default is to convert to a Multi Index on the columns)bool
若是一行包含太多的列, 那麼默認不會返回DataFrame, 若是設置成False, 那麼會將改行剔除(只能在C解析器下使用)bool
若是error_bad_lines=False, 而且warn_bad_lines=True 那麼全部的"bad lines"將會被輸出(只能在C解析器下使用)bool
分塊加載到內存, 再低內存消耗中解析, 可是可能出現類型混淆, 確保類型不被混淆須要設置爲False或者使用dtype參數指定類型, 注意使用chunksize或者iterator參數分塊讀入會將整個文件讀入到一個Dataframe, 而忽略類型(只能在C解析器中有效)int
這個參數將會在將來版本移除, 由於他的值在解析器中不推薦使用(不推薦使用)bool
這個參數將會在將來版本移除(不推薦使用), 若是設置compact_ints=True, 那麼任何有整數類型構成的列將被按照最小的整數類型存儲, 是否有符號將取決於use_unsigned參數bool
這個參數將會在將來版本移除(不推薦使用), 若是整數列被壓縮(i.e. compact_ints=True), 指定被壓縮的列是有符號仍是無符號的bool
若是使用的文件在內存內, 那麼直接map文件使用。使用這種方式能夠避免文件再次進行IO操做