Pythonの科学技術計算:パンダ
高度ウェッジJSONを備えたデータフレームパンダデータ構造は、変換は非常に便利です
直列及びデータフレームの一次元の2次元テーブルの構造及び配列を表す2つのコアデータ構造は、これら2つのデータ構造に基づいて、データがパンダのようなインポートすることができ
データ構造:シリーズとデータフレーム
一連の辞書には、保存した場合、固定長シーケンス2つndarray、辞書構造に対応する、辞書の構造は、要素の数が固定されていないので、これは、最大の違いです
二つの基本的な特性、指標値、及び、直列配置で、インデックスのデフォルトは0、1、...整数のシーケンスを増加させるには、このようなインデックス= [ '、「B」、「Cとして、インデックスを指定することができる、あります「]
import pandas as pd
from pandas import Series , DataFrame
x1 = Series([1,2,3,4])
x1 = Series(data = [1,2,3,4], index = ['a' , ' b' , 'c' , 'd'])
print x1
print x2
0 1
1 2
2 3
3 4
DTYPE:int64モード
A 1
B 2
C 3
D 4
DTYPE:int64モード
索引X1は、デフォルト値、X2は、指定されたインデックスは、インデックスが続く、データ(値)の前に、されているあります
それとも、シリーズを作成するための辞書の方法を使用することができます。
d = {'a' :1,'b':2,'c':3,'d':4}
x3 = Series(d)
print x3
データフレームと同様のデータベースのテーブル型データ構造
データフレーム辞書から成る系列の同じタイプによってインデックスを付けとして含む行と列のインデックスはみなすことができます
一部の学生は、出力テストの点数にしたいです:
import pandas as pd
from pandas import Series,DataFrame
data = {'Chineses' :[66,96,93,90,80],'English':[75,65,85,88,90],'Math':[30,98,66,77,90]}
df1 = DataFrame(data)
df2 = DataFrame(data,index = ['Zhangfei','Guanyu','Zhaoyun','Huangzhong','Dianwei'],columns=['English','Math','Chineses'])
print df1
print df2
列インデックスDF2は[ '英語'、 '数学'、 '中国人']は、行インデックスは[ 'Zhangfei'、 'Guanyu'、 'Zhaoyun'、 '黄忠'、 'Dianwei']であり、出力DF2です。
English Math Chineses
Zhangfei 75 30 66
Guanyu 65 98 96
Zhaoyun 85 66 93
Huangzhong 88 77 90
Dianwei 90 90 80
データのインポートとエクスポート
パンダは、XLSX、CSVファイルからデータをインポート可能、またはXLSXへの出力、CSVファイル、等であってもよいです
import pandas as pd
from pandas import Series,DataFrame
score = DataFrame(pd.read_excel('data.xlsx'))
score.to_excel('datal.xlsx')
print score
例運転中に行方不明とopenpyxl xlrdパッケージインストールPIPインストールを使用することができる場合
データクリーニング
data = {'Chineses' :[66,96,93,90,80 ],'English':[75,65,85,88,90],'Math':[30,98,66,77,90]}
df2 = DataFrame(data,index= ['Zhangfei','Guanyu','Zhaoyun','Huangzhong','Dianwei'],columns=['English','Math','Chineses'])
クリーンアッププロセスは、一般的に次のように発生します。
データフレームの不要な行や列を削除する1
使用ドロップ()関数は、このような削除の言語その列にしようとして、不要な行や列を削除するには
df2 = df2.drop(columns=['Chineses'])
張飛は、この行を削除したいです
df2 = df2 . drop(index = ['Zhangfei'])
2.名前の変更は、列に定め、それが簡単に名前のリストを識別するために作ります
こうした中国人として使用する名前の変更(列= new_names、インプレース=真)機能、 - > TuWen、英語 - > YingYu
df2.rename(columns={'Chineses':'YuWen' , 'English':'YingYu' } , inplace = True)
3、重複する値を削除
drop_duplicates()が自動的に重複行を削除します
df = df.drop_duplicates() #去掉重复行
4.書式設定の問題
変更データ形式
多くの場合、非標準データフォーマット、カノニカルフォーマットastype関数を使用して、自動的に値STR中国人種類を変更するような、またはInt64型で
df2['Chineses'].astype('str')
df2['Chineses'].astype(np.int64)
データ空間の間
STRが第1のストリップの機能を使用する場合、あなたはデータ間のスペースを削除したい場合は、フォーマットの種類へのデータの操作を容易にするためにあるなりました
#删除左右两边空格
df2['Chineses'] = df2['Chineses'].map(str.strip)
#删除左边的空格
df2['Chineses'] = df2['Chineses'].map(str.lstrip)
#删除右边的空格
df2['Chineses'] = df2['Chineses'].map(str.rstrip)
ドル中国人フィールドシンボル場合にも、特殊な記号を削除するには、ストリップの機能を使用することができます
df2['Chineses'] = df2['Chineses'].str.strip('$')
ケース変換
名、都市名などを統一変換する場合に使用することができる、あなたは(上を使用することができます)、LOWER()、タイトル()
#全部大写
df2.columns = df2.columns.str.upper()
#全部小写
df2.columns = df2.columns.str.lower()
#首字母大写
df2.columns = df2.columns.str.title()
ヌルを探します
ISNULLを持つ関数のnull値ナン、一見いくつかのフィールドがあるかもしれません
あなたはヌル値はNaNがあるどのような場所を見たい場合は、データテーブルDF()のためにdf.isnullことができ、結果があるという帰真
NULL列があることを知りたい、あなたはdf.isnullを使用することができます()。任意の()、結果はヌルがTrueであります
データクリーニングを使用して関数を適用します
名前欄の値は、大文字に変換されます。
df['name'] = df['name'].apply(str.upper)
定義された機能は、使用時に適用され、関数は元の値double_df定義され*
、カラムDF1「言語」の次に数値を返すように2 *
秒プロセス。
def double_df(x):
return 2*x
df1[u'语文'] = df1[u'语文'].apply(double_df)
あなたは「という名前NEW1」の列が列「言語」と「英語」と実績「NEW2に」m回「言語」と「英語」のスコアの合計であり、ここで、2を追加し、データフレームのために、より複雑な機能を定義することができn回
def plus(df,n,m):
df['new1'] = (df[u'语文']+df[u'英语']) * m
df['new2'] = (df[u'语文'] + df[u'英语']) * n
return df
df1 = df1.apply(plus,axis=1,args=(2,3,))
軸= 1フォロー軸の代表的な、軸= 0軸に代わっフォローに作用し、引数は、2つのパラメータが渡され、即ち、N = 2、M = 3、nおよびmは使用プラス機能であり、それによって生成など新しいDF
統計
()関数を記述し、我々はデータの包括的な理解を持つことができます
df1 = DataFrame({'name' : ['Zhangfei' , 'Guanyu' , 'a' , 'b' , 'c'] , ' data1':range(5)})
print df1.describe()
数5.000000
平均2.000000
1はstd。******
I 0.000000
25%1.000000
50%2.000000
75%3.000000
最大4.000000
データシートをマージ
データチャネルは、複数のソース・テーブルの複数が組み合わされます
# 创建两个DataFrame
df1 = DataFrame({'name' : ['Zhangfei' , 'Guanyu' , 'a' , 'b' , 'c'] , ' data1':range(5)})
df2 = DataFrame({'name' : ['Zhangfei' , 'Guanyu' , 'A' , 'B' , 'C'] , ' data1':range(5)})
指定された列に基づいて1が接続されています
# 基于name列进行连接
df3 = pd.merge(df1,df2,on = 'name') //然后返回df1 和 df2 两个表中name列相同元素的部分
2.inner接続内
# inner内连接是merge合并的默认情况,inner内连接是键的交集,这里df1 & df2 相同的键是name,所以是基于name字段做的连接
df3 = pd.merge(df1,df2,how='inner')
3.leftが参加し、左
# 左连接是以第一个 DataFrame为主进行的连接,第二个 DataFrame作为补充
df3 = pd.merge(df1, df2,how='left') //返回的是先是data1 和name是第一个表的内容,还有data2除了相同的数值其他都是NaN
def3:
DATA1名DATA2
0 Zhangfei 0.0
1 Guanyu 1.0
の2
3 b NaN
4℃で
4.右右接続
df3 = pd.merge(df1, df2,how='right')
def3:
DATA1名DATA2
0.0 Zhangfei 0
1.0 Guanyu 1
2へ
NaN B 3
C 4
外側の外部接続
# 相当与求两个DataFrame的并集
df3 = pd.merge(df1,df2,how = 'outer')
DF3:
DATA1名DATA2
0.0 Zhangfei 0.0
1.0 Guanyu 1.0
2.0の
3.0 b NaN
4.0 Cで
A 2.0で
NaN B 3.0
C 4.0で
SQLの道パンダを開く方法
SQL文は、パンダを動作させるためにPythonで直接使用することができます
pandasql:主な機能は、sqldfある二つのパラメータ、SQLクエリを受け入れ、環境変数、グローバル(のセットがある)、または地元の人について()、それはPythonのデータフレームの操作に直接SQLステートメントを使用することができます。
import pandas as pd
from pandas import DataFrame
from pandasql import sqldf , load_meat, load_births
df1 = DataFrame({'name' : ['Zhangfei' , 'Guanyu' , 'a' , 'b' , 'c'] , ' data1':range(5)})
pysqldf = lambda sql:sqldf(sql , globals())
sql = "select * from df1 where name = 'Zhangfei'"
print pysqldf(sql)
ラムダは、無名関数を定義するために使用されます。
lambda arguement_list:experssion
arguement_listパラメータリスト、パラメータが表現experssionあり、それが表現評価さexperssionに従って返されます
pysqldf = lambda sql:sqldf(sql , globals())
SQLパラメータは、グローバルパラメータの使用は、SQLでDF1ので、もちろん、グローバルグローバル入力パラメータsqldf、操作sqldfのSQLの結果を返し、入力され
データフレームは、人の3人の被験者のそれぞれについて計算された「和」追加しながら、データを使用して清掃を作成します
フルネーム | 中国の | 英語 | 数学 |
---|---|---|---|
張飛 | 66 | 65 | |
関羽 | 95 | 85 | 98 |
趙 | 95 | 92 | 96 |
黄 | 90 | 88 | 77 |
徒渉します | 80 | 90 | 90 |
徒渉します | 80 | 90 | 90 |
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import pandas as pd
data = {'Chinese': [66, 95, 93, 90, 80, 80], 'English': [65, 85, 92, 88, 90, 90],
'Math': [None, 98, 96, 77, 90, 90]}
df = pd.DataFrame(data, index=['张飞', '关羽', '赵云', '黄忠', '典韦', '典韦'],
columns=['English', 'Math', 'Chinese'])
# 去除重复行
df = df.drop_duplicates()
# 列名重新排序
cols = ['Chinese', 'English', 'Math']
df = df.filter(cols, axis=1)
# 列名改为中文
df.rename(columns={'Chinese': '语文', 'English': '英语',
'Math': '数学'}, inplace=True)
def total_score(df):
df['总分'] = df['语文'] + df['英语'] + df['数学']
return df
# 求成绩的和,用老师讲的 apply 方法
df = df.apply(total_score, axis=1)
# 或者可以用这个方法求和
# df['总分'] = df['语文'] + df['英语'] + df['数学']
# 按照总分排序,从高到低,此时有缺失值
df.sort_values(['总分'], ascending=[False], inplace=True)
# 打印显示成绩单信息,张飞有空值
print(df.isnull().sum())
print(df.describe())
print(df)
# 使用数学成绩均值填充张飞同学的缺失值
df['数学'].fillna(df['数学'].mean(), inplace=True)
# 再次求成绩的和并打印显示成绩单情况
df = df.apply(total_score, axis=1)
print(df.isnull().sum())
print(df.describe())
print(df)