ホームページ  >  記事  >  バックエンド開発  >  Pythonでのpandas.DataFrameの簡単な操作方法(作成、インデックス、追加、削除)の紹介

Pythonでのpandas.DataFrameの簡単な操作方法(作成、インデックス、追加、削除)の紹介

高洛峰
高洛峰オリジナル
2018-05-29 15:23:0529300ブラウズ

この記事では、Python での pandas.DataFrame の簡単な操作方法 (作成、インデックス付け、追加、削除) を紹介します。作成、インデックス付け、追加、削除に関する関連情報も含め、記事内の紹介が非常に詳しく説明されています。以下を見てみましょう。

はじめに

最近、インターネットで pandas.DataFrame の操作手順をたくさん検索しました。それらはすべて基本的な操作ですが、これらの操作を組み合わせるにはまだ時間がかかります。 DataFrame を正しく動作させるには、バグの調整に時間がかかりました。あなたや私、そして他の人の便宜のために、ここでいくつかの要約を作成します。興味のあるお友達はぜひ見に来てください。 pandas.DataFrame的操作说明,都是一些基础的操作,但是这些操作组合起来还是比较费时间去正确操作DataFrame,花了我挺长时间去调整BUG的。我在这里做一些总结,方便你我他。感兴趣的朋友们一起来看看吧。

一、创建DataFrame的简单操作:

1、根据字典创造:

In [1]: import pandas as pd
In [3]: aa={'one':[1,2,3],'two':[2,3,4],'three':[3,4,5]}
In [4]: bb=pd.DataFrame(aa)
In [5]: bb
Out[5]: 
 one three two
0 1 3 2
1 2 4 3
2 3 5 4`

字典中的keys就是DataFrame里面的columns,但是没有index的值,所以需要自己设定,不设定默认是从零开始计数。

bb=pd.DataFrame(aa,index=['first','second','third'])
bb
Out[7]: 
 one three two
first 1 3 2
second 2 4 3
third 3 5 4

2、从多维数组中创建

import numpy as np
In [9]: del aa
In [10]: aa=np.array([[1,2,3],[4,5,6],[7,8,9]])
In [11]: aa
Out[11]: 
array([[1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]])
In [12]: bb=pd.DataFrame(aa)
In [13]: bb
Out[13]: 
 0 1 2
0 1 2 3
1 4 5 6
2 7 8 9

从多维数组中创建就需要为DataFrame赋值columns和index,否则就是默认的,很丑的。

bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])
In [15]: bb
Out[15]: 
 one two three
22 1 2 3
33 4 5 6
44 7 8 9

3、用其他的DataFrame创建

bb=pd.DataFrame(aa,index=[22,33,44],columns=['one','two','three'])
bb
Out[15]: 
 one two three
22 1 2 3
33 4 5 6
44 7 8 9
cc=bb[['one','three']].copy()
Cc
Out[17]: 
 one three
22 1 3
33 4 6
44 7 9

这里的拷贝是深拷贝,改变cc中的值并不能改变bb中的值。

cc['three'][22]=5
bb
Out[19]: 
 one two three
22 1 2 3
33 4 5 6
44 7 8 9

cc
Out[20]: 
 one three
22 1 5
33 4 6
44 7 9

二、DataFrame的索引操作:

对于一个DataFrame来说,索引是最烦的,最易出错的。

1、索引一列或几列,比较简单:

bb['one']
Out[21]: 
22 1
33 4
44 7
Name: one, dtype: int32

多个列名需要将输入的列名存在一个列表里,才是个collerable的变量,否则会报错。

bb[['one','three']]
Out[29]: 
 one three
22 1 3
33 4 6
44 7 9

2、索引一条记录或几条记录:

bb[1:3]
Out[27]: 
 one two three
33 4 5 6
44 7 8 9
bb[:1]
Out[28]: 
 one two three
22 1 2 3

这里注意冒号是必须有的,否则是索引列的了。

3、索引某几列的变量的某几条记录,这个折磨了我好久:

第一种

bb.loc[[22,33]][['one','three']]
Out[30]: 
 one three
22 1 3
33 4 6

这种不能改变这里面的值,你只是能读值,不能写值,可能和loc()函数有关:

bb.loc[[22,33]][['one','three']]=[[2,2],[3,6]]
In [32]: bb
Out[32]: 
 one two three
22 1 2 3
33 4 5 6
44 7 8 9

第二种:也是只能看

bb[['one','three']][:2]
Out[33]: 
 one three
22 1 3
33 4 6

想要改变其中的值就会报错。

In [34]: bb[['one','three']][:2]=[[2,2],[2,2]]
-c:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
F:\Anaconda\lib\site-packages\pandas\core\frame.py:1999: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame
 return self._setitem_slice(indexer, value)

第三种:可以改变数据的值!!!

Iloc是按照数据的行列数来索引,不算index和columns

bb.iloc[2:3,2:3]
Out[36]: 
 three
44 9

bb.iloc[1:3,1:3]
Out[37]: 
 two three
33 5 6
44 8 9
bb.iloc[0,0]
Out[38]: 1

下面是证明:

bb.iloc[0:4,0:2]=[[9,9],[9,9],[9,9]]
In [45]: bb
Out[45]: 
 one two three
22 9 9 3
33 9 9 6
44 9 9 9

三、在原有的DataFrame上新建一个columns或几个columns

1、什么都不用的,只能单独创建一列,多列并不好使,亲测无效:

bb['new']=[2,3,4]
bb
Out[51]: 
 one two three new
22 9 9 3 2
33 9 9 6 3
44 9 9 9 4
bb[['new','new2']]=[[2,3,4],[5,3,7]]
KeyError: "['new' 'new2'] not in index"

赋予的list基本就是按照所给index值顺序赋值,可是一般我们是要对应的index进行赋值,想要更高级的赋值就看后面的了。

2、使用字典进行多列按index赋值:

aa={33:[234,44,55],44:[657,77,77],22:[33,55,457]}
In [58]: bb=bb.join(pd.DataFrame(aa.values(),columns=['hi','hello','ok'],index=aa.keys()))
In [59]: bb
Out[59]: 
 one two three new hi hello ok
22 9 9 3 2 33 55 457
33 9 9 6 3 234 44 55
44 9 9 9 4 657 77 77

这里aa是一个字典和列表的嵌套,相当于一条记录,使用keys当做index名而不是一般默认的columns名。达到了按index多列匹配的目的。由于dict()储存是混乱的,之间用dict()

1. DataFrame を作成する簡単な操作:

1. 辞書に基づいて作成:

bb.drop(['new','hi'],axis=1)
Out[60]: 
 one two three hello ok
22 9 9 3 55 457
33 9 9 6 44 55
44 9 9 9 77 77

辞書のキーは DataFrame の列ですが、インデックス値がないため、自分で設定する場合は、いいえ、デフォルト設定では、ゼロからカウントを開始します。

bb.drop([22,33],axis=0)
Out[61]: 
 one two three new hi hello ok
44 9 9 9 4 657 77 77
2. 多次元配列から作成する

rrreee

多次元配列から作成するには、DataFrame に列とインデックスを割り当てる必要があります。そうでないと、それがデフォルトになり、見苦しくなります。

rrreee

3. 他の DataFrame を使用して

rrreee を作成します。ここでのコピーは、cc の値を変更しても bb の値を変更することはできません。 rrreee

2. DataFrame のインデックス操作:

🎜🎜 DataFrame の場合、インデックス作成は最も面倒でエラーが発生しやすいものです。 🎜🎜🎜1. 1 つまたは複数の列のインデックス付けは比較的簡単です: 🎜🎜rrreee🎜 複数の列名をコレラ可能な変数としてリストに格納する必要があります。そうでない場合は、エラーが報告されます。 🎜rrreee🎜🎜2. 1 つまたは複数のレコードにインデックスを付けます: 🎜🎜rrreee🎜🎜ここではコロンが必要であることに注意してください。コロンがなければインデックス列になります。 🎜🎜🎜🎜🎜3. 特定の列の変数の特定のレコードにインデックスを付ける これは私を長い間悩ませました: 🎜🎜🎜最初のタイプ🎜rrreee🎜 この種のメソッドは内部の値を読み取ることしかできません。値の書き込みは loc() 関数に関連している可能性があります: 🎜rrreee🎜 2 番目のタイプ: 🎜rrreee🎜 のみが表示されます 値を変更したい場合は、エラーが報告されます。 🎜rrreee🎜 3 番目のタイプ: データの値を変更できます! ! ! 🎜🎜Iloc はインデックスと列をカウントせず、データの行と列の数に従ってインデックスを作成します🎜rrreee🎜以下が証明です:🎜rrreee🎜🎜🎜3. 元の DataFrame に新しい列または複数の列を作成します🎜🎜🎜 🎜🎜1. 列は 1 つずつしか作成できません。個人テストは無効です。🎜🎜rrreee🎜 で指定されたリストは、基本的に指定されたインデックス値の順序で割り当てられます。一般に、対応するインデックスを割り当てる必要があります。より高度な割り当てが必要な場合は、以下を参照してください。 🎜🎜🎜2. ディクショナリを使用してインデックスによって複数の列に値を割り当てます: 🎜🎜rrreee🎜ここで aa はネストされたディクショナリとリストであり、一般的なレコードの代わりにキーをインデックス名として使用します。デフォルトの列名。インデックスによって複数の列を照合するという目的は達成されます。 dict() の格納は混沌としているため、インデックスに値を割り当てずに dict() を使用すると、レコード内で混乱が生じる可能性があることに注意してください。 🎜🎜🎜🎜4. 複数の列またはレコードを削除する: 🎜🎜🎜🎜🎜列を削除する🎜🎜rrreee🎜🎜レコードを削除する🎜🎜rrreee🎜 Python での pandas.DataFrame の行と列の合計と追加に関する記事を共有します。コラムの例など、興味のある方はぜひご覧ください。 🎜🎜DataFrame にはまだカバーされていない機能がたくさんあります。それらについては、公式 Web サイトの API を読んだ後、引き続き共有していきます。 🎜🎜関連記事:🎜🎜🎜Pythonのpandas.DataFrameで行と列を合計して新しい行と列を追加するサンプルコードについて🎜🎜🎜🎜Pythonのpandas.DataFrameで特定の行を除外するサンプルコードを詳しく解説🎜 🎜

以上がPythonでのpandas.DataFrameの簡単な操作方法(作成、インデックス、追加、削除)の紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。