パンダPythonのサードパーティ製のライブラリ

A、パンダさんのプロフィール

Pythonのデータ解析ライブラリやパンダnumpyのは、ツール、作成したデータ分析タスクを解決するためのツールに基づいています。パンダは、大規模なライブラリを含め、いくつかの標準的なデータモデルは、大規模なデータセットを効率的に動作するために必要なツールを提供します。パンダは、多くの機能を提供し、方法は迅速かつ容易にデータを処理するために私たちを有効にします。あなたはすぐにそれがPythonが強力で効率的なデータ解析環境になるように重要な要因の一つであることがわかります。

パンダはAQRキャピタル・マネジメントが開発したデータ解析パッケージのpython、2008年4月に最初の、で、2009収入の最後に出てきた、パイソンパケットに焦点を開発するためにそこに継続PyData開発チームとメンテナンスを開発し、プロジェクトのPyDataの一部であります。パンダとは、もともとパンダの時系列分析は、優れたサポートを提供し、そのため、財務データ分析ツールとして開発されました。Pythonとデータ解析(データ解析)パネル(パネルデータ)のデータからパンダ名。パネルデータもパネルパンダのデータ型で提供用語に関する経済学キューブ、です。

第二に、データ構造

  • シリーズ:1次元配列numpyの1次元配列は、似ています。両方の基本とPythonリストデータ構造も非常に類似しており、違いは:要素のリストは、異なるデータタイプであること、およびのみシリーズアレイを可能にし、メモリのより効率的な使用に、同じデータ型を格納することができます、業務効率を向上させます。
  • 時系列:時間インデックスシリーズ。
  • データフレーム:二次元の表形式のデータ構造。多くの機能と同様のRのdata.frame。一連のデータフレームは、容器と理解することができます。以下の内容は、主にデータフレームに基づきます。
  • パネル:3次元配列は、データフレームとしてコンテナを理解されるであろう。

パンダは2つの独自の基本的なデータ構造を持っています。読者はそれが2つのデータ構造を有しているが、それはまだPythonライブラリですので、そう、、、その点に注意してくださいいくつかのPythonのデータ型にはまだあまりにも、ここで適用されるべきである、あなたはまた、独自のクラス定義のデータ型を使用することができます。しかし、パンダと2つのデータ型を定義:シリーズとデータフレームは、彼らが簡単にデータ操作を可能にします。

シリーズ

Pythonのタイプシリーズは、()<クラスのpandas.core.series.Series '>です。シリーズは、データの1次元構造であるため、我々はこのように、配列を介して直接、このようなデータを作成することができます。

import pandas as pd
import numpy as np

series1 = pd.Series([1, 2, 3, 4])
print("series1:\n{}\n".format(series1))

# 这段代码输出如下:
series1:
0 1
1 2
2 3
3 4
dtype: int64

この出力は次の通り:

  • 出力データの最後の行は、データがタイプint64型のあるシリーズ、のタイプです。
  • 2列目の出力データを、最初の列はインデックスデータで、インデックスはパンダに呼ばれています。

私たちは、シリーズ内のデータとインデックスをプリントアウトすることができます:

print("series1.values: {}\n".format(series1.values))
print("series1.index: {}\n".format(series1.index))
这两行代码输出如下:
series1.values: [1 2 3 4]
series1.index: RangeIndex(start=0, stop=4, step=1)

(上記のように)指定しない場合は、インデックスの形式である[1、N-1]です。シリーズを作成するときしかし、我々はまた、インデックスを指定することができます。整数インデックスは、必ずしも必要ではないが、そのような文字列などのデータ、任意のタイプであってもよいです。例えば、我々は7つのノートへの7つの文字にマッピングされました。オブジェクトインデックスは、データがそれによって取得することができる対応するので、次の例です。

series2 = pd.Series([1, 2, 3, 4, 5],index=["C", "D", "E", "F", "G"])
print("series2:\n{}\n".format(series2))
print("E is {}\n".format(series2["E"]))

# 这段代码输出如下:
series2:
C 1
D 2
E 3
F 4
G 5
dtype: int64
E is 3

データフレーム

タイプDateFrame Pythonは()である<クラスのpandas.core.frame.DataFrame '>

DateFrame作成三つの主要な方法があります。

1)二次元アレイによりデータフレームを作成します

arr2 = np.array(np.arange(16)).reshape(4,4)
df1 = pd.DataFrame(arr2)
  0   1   2   3
0 0   1   2   3
1 4   5   6   7
2 8   9   10  11
3 12  13  14  15

私たちが見ることができるこの出力から、デフォルトのインデックスと列名は[0、N-1]の形式です。データフレームを作成するときに我々はそうのように、カラム名とインデックスを指定することができます。

df2 = pd.DataFrame(np.arange(16).reshape(4,4),columns=["column1", "column2", "column3", "column4"],index=["a", "b", "c", "d"])
print("df2:\n{}\n".format(df2))
# 结果如下
  column1        column2          column3         column4
a 0              1                2               3
b 4              5                6               7
c 8              9                10              11
d 12             13               14              15

我々はまた、直接データフレームを作成するには、列のデータを指定することができます。

df3 = pd.DataFrame({"note" : ["C", "D", "E", "F", "G", "A", "B"],"weekday": ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]})
print("df3:\n{}\n".format(df3))
# 这段代码输出如下:
note weekday
0 C Mon
1 D Tue
2 E Wed
3 F Thu
4 G Fri
5 A Sat
6 B Sun

ご注意:
異なる列データフレームは、異なる種類のデータもできる
シリーズ・アレイはデータフレームを作成する場合は、各シリーズには、例えば、行ではなく、いずれかになります。

noteSeries = pd.Series(["C", "D", "E", "F", "G", "A", "B"],index=[1, 2, 3, 4, 5, 6, 7])
weekdaySeries = pd.Series(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],index=[1, 2, 3, 4, 5, 6, 7])
df4 = pd.DataFrame([noteSeries, weekdaySeries])
print("df4:\n{}\n".format(df4))
df4的输出如下:
  1 2 3 4 5 6 7
0 C D E F G A B
1 Mon Tue Wed Thu Fri Sat Sun

2)の方法により、データディクショナリフレームを作成し
、以下のデータディクショナリボックスを作成するために、2つのネストされた辞書、辞書のリストです。

dic2 = {'a':[1,2,3,4],'b':[5,6,7,8],'c':[9,10,11,12],'d':[13,14,15,16]}
df2 = pd.DataFrame(dic2)
dic3 = {'one':{'a':1,'b':2,'c':3,'d':4},'two':{'a':5,'b':6,'c':7,'d':8},'three':{'a':9,'b':10,'c':11,'d':12}}
df3 = pd.DataFrame(dic3)
结果如下:
  a b c d
0 1 5 9 13
1 2 6 10 14
2 3 7 11 15
3 4 8 12 16
  one two three
a 1 5 9
b 2 6 10
c 3 7 11
d 4 8 12

辞書「キー」(「名前」、「マーク 」、「価格」)がデータフレームの値(名前)の列で、辞書の各「キー」と「値」は、それらのリストでは、その垂直列であります特定のパディングデータ。
Dic2インデックス上で定義されたが決定されていない、従って、従来(実際には既にシリーズ形成される)0からの整数です。以上の結果から、出て、これがあることは明らかである二次元データ構造(ExcelまたはMySQLで同様の結果を参照します)。
上記のデータは、列の順序は単に辞書内の同じキーの順序として、定義されないが、示すデータフレームに、辞書キーと比較列は、順序が予め定められていてもよいということである明らかな差があるので、次の操作を行います。
dic2_1 =データフレーム(dic2、列= [ 'B'、 ''、 'C'、 'D'])

3)データ・フレームを介してデータフレームを作成
DF4 = DF3 [[「1」 、「3」]# すなわち、いずれかを選択し、DF3の3列
S3 = DF3 [「1」] # DF3すなわちカラムのいずれかを選択

三、インデックスオブジェクト

パンダオブジェクトのインデックスは、軸を記述したメタデータ情報が含まれています。作成またはデータフレームシリーズと、アレイまたは配列タグは、インデックスに変換されます。これは、列と行に次のようDATAFRAME Indexオブジェクトによって得ることができます。

series1 = pd.Series([1, 2, 3, 4])
print(series1.index)
代码输出如下:
RangeIndex(start=0, stop=4, step=1)

dic3 = {'one':{'a':1,'b':2,'c':3,'d':4},'two':{'a':5,'b':6,'c':7,'d':8},'three':{'a':9,'b':10,'c':11,'d':12}}
df3 = pd.DataFrame(dic3)
print(df3.columns)
print(df3.index)
这两行代码输出如下:
Index(['one', 'two', 'three'], dtype='object')
Index(['a', 'b', 'c', 'd'], dtype='object')

注:
インデックスが設定されていないので、重複したデータを含むことができ
、それはデータセキュリティアクセスできるように索引オブジェクトは、変更されない値
データフレームは、その中のデータにアクセスするには次の二つのオペレータ提供:
LOC:行と列でのアクセスデータへのインデックス
ILOC:アクセスデータの行と列のインデックスを介して

print(df3[['one','two']])                 # df3[列索引]
print(df3.loc[['a','b'], ['one','two']])  # loc[行索引,列索引]
print(df3.iloc[[0, 1], 0])                # iloc[行下标,列下标]

第二行代码访问了行索引为0和1,列索引为“note”的元素。第三行代码访问了行下标为0和1(对于df3来说,行索引和行下标刚好是一样的,所以这里都是0和1,但它们却是不同的含义),列下标为0的元素。

   one  two
a    1    5
b    2    6
c    3    7
d    4    8

   one  two
a    1    5
b    2    6

a    1
b    2
Name: one, dtype: int64

図2は、自動アライメント
自動アライメント-二つの配列二つの演算シーケンスのための必要性がある場合は、その値を反映する指標があります。

s5 = pd.Series(np.array([10,15,20,30,55,80]),index = ['a','b','c','d','e','f'])
s6 = pd.Series(np.array([12,11,13,15,14,16]),index = ['a','c','g','b','d','f'])
s5 + s6
s5/s6
结果如下
a    22.0
b    30.0
c    31.0
d    44.0
e     NaN
f    96.0
g     NaN
dtype: float64

a    0.833333
b    1.000000
c    1.818182
d    2.142857
e         NaN
f    5.000000
g         NaN
dtype: float64

S6はないインデックスeを対応するS5は、該当する指数gがないので、計算はNaNに値2つの欠落データを生成しないであろう。この演算結果は、2つのシーケンスインデックスはなく、単純な和または分割された2つの配列の自動アライメントを達成することに留意されたいです。データフレームの位置合わせではなく、自動アライメントのちょうど行インデックスだけでなく、自動的に列インデックス(変数名)を整列させる
データフレームは、同じインデックスを有し、データフレームは、二次元アレイを促進することで、そうではないだけ行インデックスでなく、また列インデックスがあり、はるかに強力なアプリケーションの配列と比較して、この部分はデータに配置されますボックスインデックスデータを説明クエリ。

第四に、ファイル操作

:パンダread_ライブラリは、さまざまなファイル形式を読み取るための関数のセットを提供し、彼らは次の通りです
read_csv
read_table
read_fwf
read_clipboard
read_excel
read_hdf
read_html
read_json
read_msgpack
read_pickle
read_sas
read_sql
read_stata
read_feather
注:Excelが読み込まれるファイルは、また、追加インストールする必要があります図書館:xlrdので、あなたは、PIPでインストールを完了することができます:
sudoはPIP3 xlrdをインストール

我々はエクセルの簡単な例を見て次に読み取ります。

import pandas as pd
import numpy as np
df1 = pd.read_excel("data/test.xlsx")
print("df1:\n{}\n".format(df1))
这个Excel的内容如下:
df1:
C Mon
0 D Tue
1 E Wed
2 F Thu
3 G Fri
...

次のように我々は見ての例のCSVファイル、CSVファイルを読み込む:
C、月
D、火
E、水
F.、木
...
読み込みも非常に簡単です:
DF2 = pd.read_csv(「データ/ Test1.csv ")
を印刷(" DF2:\ N- {} \ N - 」フォーマット(DF2))

セパレータはされていない場合、我々はこのようなファイルの方法で指定された区切り文字、読むことができます:
DF3 = pd.read_csv(「|」「データ/ test2.csv」、オン9月=)
印刷(「DF3を:\ {N- } \ n」.format(DF3) )

実際には、read_csv次の表に示すように、サポートに非常に多くのパラメータは、読み取りパラメータを調整するために使用します:

パラメータ 説明
ファイルパス
9月または区切り文字 フィールドセパレータ
ヘッダ 行の列名の数、デフォルトは0(最初の行)であります
index_col インデックス結果として行番号または列の名前
結果の列名のリスト
skipRows 開始位置をスキップする行数
na_values 代わりに、NA値のシーケンス
コメント 行末文字まで別々のコメント
parse_dates データ解析してみてくださいdatetimeデフォルトはFalse
keep_date_col 列は、日付、予約カラム接続を解析するために接続されている場合。デフォルトはFalse
コンバータ コラムコンバータ
dayfirst 曖昧日付を引き起こす可能性が解析するとき、内部形式に保存されています。デフォルトはFalse
data_parser 関数は、日付を解析するために使用されます
NROWS ファイルからの読み取りを開始する行数
イテレータ の部分を読むためTextParserオブジェクトを返します。
チャンク 指定読み出しブロックのサイズ
skip_footer 行数は無視されるように、ファイルの末尾
冗長 の出力を解析するための出力情報
エンコーディング ファイルのエンコーディング
絞ります 解析されたデータは1列のみ、その後、リターンが含まれている場合Series
数千 区切り文字の一千数

注:バイトでUTF-8符号化部、バイト順序は、すべてのシステムは、ヤン、無バイト順の一つであり、従ってそれは実際BOM(「バイト順マーク」)を必要としません。しかし、UTF-8 BOMとBOMを提供するために、UTF-8-SIGが必要です。
簡単に言えば、UTF-8-SIGは、順番にバイトコードです。
これが発生したときに、読み取り、CSVでのパンダ、エラー、キーエラー、ファイルの「パンダ/ index.pyx」、ライン137、pandas.index.IndexEngine.get_loc中(パンダ/ index.c:4154)であれば
、ファイルを「パンダ/index.pyx "pandas.index.IndexEngine.get_locでライン159、(PANDAS / index.c:4018)
ファイル" PANDAS / hashtable.pyx」、pandas.hashtable.PyObjectHashTable.get_item(PANDAS /ハッシュテーブルのライン675、 .C:12368)
ファイル"PANDAS / hashtable.pyx"、pandas.hashtable.PyObjectHashTable.get_item(PANDAS / hashtable.cにライン683、:12322)は
この場合、UTF-8-SIGそのような符号化の使用を検討するため、すなわち、 encdoinf =「UTF-8-SIG 」
あなたは、このコードを変更しようとすることができたときに中国人が文字化け出会い

Read_csvは、機能の説明を詳細に、ここを参照してください:pandas.read_csv

V. 1つのクエリデータ

引入数据集
student = pf.read_csv( '文件路径名' , header = None) (header 表示返回的数据是否有别名)

student.shape    # 查看数据的形状
data.columns     # 查看所有的列名
data.index       # 查看索引
data.dtypes      # 查看每一列数据的类型
data.ndim        # 查看数据的维度

# 查询前几行 或 后几行
student.head(5)
student.tail(5)

# 查询指定的行
student.ix[ ]     # 索引是字符串或数字,多行索引必须使用两个中括号student.ix[[ ]]
student.loc['a']    # 索引字符串
student.iloc[1]   # 索引数字

# 查询指定的列
student[列名] 或 student.列名    #注意当我们提取了一列,Pandas将返回一个series,而不是一个dataframe。
student [['Name' , 'Height' , 'Weight']]    #如果多个列的话,必须使用双重中括号
student.ix [:,['Name' , 'Height' , 'Weight']]    #通过ix查询指定的列

# 查询指定的行和列
student.ix [[0,2,4],['Name' , 'Height' , 'Weight']]

下面通过布尔索引来实现特定信息的查询
student[student['sex'] == F] --- 查询所有性别为女生的信息
student[(student['sex'] == F) & (stuent['age'] > 18)] -- 多条件查询,查询所有性别为女且年龄大于18岁的信息
student[(student['sex'] == F) & (stuent['age'] > 18)] [['name' , 'height']] --查询性别为女,年龄大于18的学生的姓名 和 体重

V.2統計解析

パンダモジュールは私たちに、このような合計、平均、最小値、最大値などのメリット関数記述統計の多くを提供し、これらの機能は、我々は、特定のを見て:
最初にランダムに3組のデータを生成します

np.random.seed(1234)
D1 = pd.Series(2 * np.random.normal(サイズ= 100)+3)
D2 = np.random.f(2,4、サイズ= 100)
D3 = np.random .randint(1100、サイズ= 100)

d1.count()#nullでない要素算出
d1.min()#最小
d1.max()#最大
which.min関数Rと同様d1.idxmin()#最小位置、
d1.idxmax(最大の)#位置、関数R which.maxと同様である
d1.quantile(0.1)#10%分位
d1.sum()#合計
d1.mean()#平均
のd1.median()#桁
d1.mode()#モード
d1.var()#分散
d1.std()#標準偏差
d1.mad()#平均絶対偏差
d1.skew()#歪度
d1.kurt()#尖度
1と2次元の方法は、上記利用可能です。

d1.describe()#出力は、一の以上の記述的統計指標で、配列のみまたはデータブロックのdescirbe方法は、この方法のいかなる一次元配列が存在しません

簡単な記述統計上、相関係数がまた提供される連続変数(CORR)と共分散行列(COV)を解くことに加えて、これは、R言語の用法と一致しています。
df.corr()

計算について相関係数Pearson法では、デフォルトのメソッドを使用して呼び出すかkendell方法または方法のスピアマン、ピアソンすることができます。
df.corr( 'スピアマン')

あなたは、変数の残りの部分と一つの変数の相関係数に集中したい場合は、corrwithを使用することができ、以下の当事者は唯一の変数x1の残りの部分との相関係数を気:
df.corrwith(DF [「×1」])

数値変数間の共分散行列
df.cov()

トランスポーズ
df3.T

ソートシャフト
a.sort_index(軸= 1、昇順=偽)は、
前記軸= 1種類のすべての列を表し、次の数も移動を生じます。昇順の後ろに= Falseが欠落しているパラメータのデフォルトの昇順、降順で表現しました。

値は、データフレームのためにソートされる
a.sort(カラム=「X」)
の昇順で、この列のXです。のみ列X、及びすべての列が軸以上の動作によってソートされることに注意してください。

5.3 SQLに似た操作

1)新しい行または列を追加します

でる:

 

でる:

 

データの行数が3つだけの行フレーム、concatメソッド後D3、6行4列に、D3 =をd2とが、列の数は、D1 + D2の行数がD2に列の数、D3 = D1の行の数であることは+です配列
concat関数が自動的に二つの可変データフレーム、割り当てられていない新しい列を整列することができ、空のNaNとして表示されます

---と存在しない列割り当ては、新しい列を作成します追加する
D1を[「4」] = 11

2)削除

1)---デルD1データフレーム削除
)2を指定されたラインデータフレームを削除--- d1.drop([「」 、「B」])、 データブロックD1がデータおよびBのインデックス値を削除する
3)削除データフレーム指定された列--- d1.drop(「1」、「 2」、軸= 1)、 軸削除列または行を指定し、デフォルト値は、軸線について0.0であることを示す値、列1
4 )ブールインデックスデータのクエリボックス、実際に削除データ操作、データの条件満たすために戻った
(D1 [「3」] d1.dropを > 11)

3)を変更する、値のデータを変更します

 

4)マルチテーブル操作リンクをソート、集約を強調するためにチェック

集約関数によって4.1)基
重合操作機能は、GROUPBY()パンダデータモジュールによって実施することができる:重合


制限がない集約関数を実行すると、その後重合することによってグループは、このような名前、身長、体重、性別、年齢列を持つデータ・ブロック・学生などの数値データを、計算され、名前欄が文字列である、それは計算されません。

ドロップで変数を削除します。

 

GROUPBYパケットはまた、年齢との高さの平均を計算するために、そのような年齢および性別のグループとして、複数の変数を設けることができます

 

また、AGGによって計算に各パケットのためのより多くの統計を実行することができます([,,])

 

4.2)ソート

ソートは、私たちが作業手順やデータフレームの並べ替えを達成ため、sort_indexとsort_valuesを使用することができ、統計解析の日々の運用に非常に一般的です。

私たちは、設定の降順に再度お試し:

上の2つの結果は、実際の値でソートされ、その結果は値でソートするsort_values()関数を推奨され、警告メッセージに示されています。
一般的に、たとえば、値のデータ]ボックスでソートされています。

4.3)マルチテーブルの結合

私はデータ接続が動作するため、より推奨合併機能午前パンダ、データベース言語を通じて達成することがキーワードに参加、接続は、さまざまな接続の初めから、また、複数のテーブル間で非常に一般的なデータベース操作で、外部結合します。
以下は、建設生徒の成績表です

 

学生は今の関連付けを行うために、学生や生徒の学力スコア表を見たい、それがどのように動作しますか?

 

デフォルトでは、なお、マージ関数は、2つのテーブル、すなわち、二つのテーブルのデータが一緒に部分を返すとの間の接続内で実施されます。どのようなパラメータは、接続の仕方によって設定することができ、左を接続する左、右は右の接続です。外外のコネクタを。

 

LEFTがペアになっていない上での名前のために、装備することができますどのくらいのマッチング情報、とスコアテーブルながら、テーブル内のすべての生徒の情報を維持することです、結果がNaNと表示されます達成するために参加します。

六の欠損値

私は書きたくないし、リンク上のそれはhttp://www.cnblogs.com/nxld/p/6058591.html

https://www.cnblogs.com/lingLongBaby/p/7147378.html

http://www.cnblogs.com/WoLykos/p/9349581.html

https://www.cnblogs.com/zuizui1204/p/6423069.html

公開された33元の記事 ウォンの賞賛4 ビュー10000 +

おすすめ

転載: blog.csdn.net/fenglepeng/article/details/104739623