タグ付けされた質問 「pandas」

Pandasは、データの操作と分析のためのPythonライブラリです。たとえば、データフレーム、多次元時系列、統計、実験科学の結果、計量経済学、金融などでよく見られる断面データセットです。Pandasは、Pythonの主要なデータサイエンスライブラリの1つです。

5
行のインデックス作成と挿入中にパンダデータフレームの強制を防止
私はパンダのデータフレームの個々の行を操作していますが、行のインデックス付けと挿入を行う際に、強制に関する問題に遭遇しています。Pandasは常に、int / floatの混合型からall-float型に強制的に変換することを望んでいるようで、この動作に対する明確なコントロールはありません。 たとえば、以下はaas intおよびbasを使用した単純なデータフレームfloatです。 import pandas as pd pd.__version__ # '0.25.2' df = pd.DataFrame({'a': [1], 'b': [2.2]}) print(df) # a b # 0 1 2.2 print(df.dtypes) # a int64 # b float64 # dtype: object これは、1つの行にインデックスを付ける際の強制に関する問題です。 print(df.loc[0]) # a 1.0 # b 2.2 # Name: 0, dtype: float64 print(dict(df.loc[0])) …

6
numpyで対称ペアをすばやく見つける
from itertools import product import pandas as pd df = pd.DataFrame.from_records(product(range(10), range(10))) df = df.sample(90) df.columns = "c1 c2".split() df = df.sort_values(df.columns.tolist()).reset_index(drop=True) # c1 c2 # 0 0 0 # 1 0 1 # 2 0 2 # 3 0 3 # 4 0 4 # .. .. .. # …
15 python  pandas  numpy 

3
パンダで2つのgeodataframeを使用して最も近い距離を取得する
これが私の最初のgeodatframeです: !pip install geopandas import pandas as pd import geopandas city1 = [{'City':"Buenos Aires","Country":"Argentina","Latitude":-34.58,"Longitude":-58.66}, {'City':"Brasilia","Country":"Brazil","Latitude":-15.78 ,"Longitude":-70.66}, {'City':"Santiago","Country":"Chile ","Latitude":-33.45 ,"Longitude":-70.66 }] city2 = [{'City':"Bogota","Country":"Colombia ","Latitude":4.60 ,"Longitude":-74.08}, {'City':"Caracas","Country":"Venezuela","Latitude":10.48 ,"Longitude":-66.86}] city1df = pd.DataFrame(city1) city2df = pd.DataFrame(city2) gcity1df = geopandas.GeoDataFrame( city1df, geometry=geopandas.points_from_xy(city1df.Longitude, city1df.Latitude)) gcity2df = geopandas.GeoDataFrame( city2df, geometry=geopandas.points_from_xy(city2df.Longitude, city2df.Latitude)) 市1 City Country Latitude Longitude …

4
パンダデータフレーム内の類似値の割合を計算する
1つのデータフレームがdfあり、2つの列があります。スクリプト(テキスト付き)とスピーカー Script Speaker aze Speaker 1 art Speaker 2 ghb Speaker 3 jka Speaker 1 tyc Speaker 1 avv Speaker 2 bhj Speaker 1 そして、私は以下のリストを持っています: L = ['a','b','c'] 次のコードで、 df = (df.set_index('Speaker')['Script'].str.findall('|'.join(L)) .str.join('|') .str.get_dummies() .sum(level=0)) print (df) 私はこのデータフレームを取得しますdf2: Speaker a b c Speaker 1 2 1 1 Speaker 2 2 …

2
どの列が日時であるかを推測する
多くの列を持つ巨大なデータフレームがあり、その多くはタイプdatetime.datetimeです。問題は、多くの場合、たとえばdatetime.datetime値とNone値(およびその他の無効な値)を含む、タイプが混在していることです。 0 2017-07-06 00:00:00 1 2018-02-27 21:30:05 2 2017-04-12 00:00:00 3 2017-05-21 22:05:00 4 2018-01-22 00:00:00 ... 352867 2019-10-04 00:00:00 352868 None 352869 some_string Name: colx, Length: 352872, dtype: object したがって、object型の列になります。これはで解決できますdf.colx.fillna(pd.NaT)。問題は、データフレームが大きすぎて個々の列を検索できないことです。 別のアプローチはを使用することですがpd.to_datetime(col, errors='coerce')、これdatetimeは数値を含む多くの列にキャストします。 df.fillna(float('nan'), inplace=True)日付を含む列はまだobjectタイプであり、同じ問題がまだ発生しますが、私もできます。 私はdatetime型へのキャストに従うことができるどのようなアプローチで、その値が実際に含まれていないこれらの列datetimeの値を、だけでなく、含まれている可能性がありNone、かつ潜在的にいくつかの不正な値(言及は、そうでないので、pd.to_datetime中try/ except句が行うだろうか)?の柔軟なバージョンのようなものpd.to_datetime(col)
14 python  pandas 

3
[:]とiloc [:]での割り当てがパンダで異なる結果をもたらすのはなぜですか?
私はilocパンダで使用しているさまざまなインデックス付け方法にとても混乱しています。 1-dデータフレームを2-dデータフレームに変換しようとしているとしましょう。まず、次の1-dデータフレームがあります a_array = [1,2,3,4,5,6,7,8] a_df = pd.DataFrame(a_array).T そして、それをのサイズの2Dデータフレームに変換し2x4ます。2Dデータフレームを次のようにプリセットすることから始めます。 b_df = pd.DataFrame(columns=range(4),index=range(2)) 次に、forループを使用して、次のコードでa_df(1-d)をb_df(2-d)に変換します for i in range(2): b_df.iloc[i,:] = a_df.iloc[0,i*4:(i+1)*4] それは私に次の結果を与えるだけです 0 1 2 3 0 1 2 3 4 1 NaN NaN NaN NaN しかし、私がに変更b_df.iloc[i,:]したときb_df.iloc[i][:]。結果は次のように正しいです、これは私が欲しいものです 0 1 2 3 0 1 2 3 4 1 5 6 7 8 …

1
パンダの関数to_excelが予期しないTypeErrorを生成します
私はパンダのデータフレームの辞書を作成しました: d[k] = pd.DataFrame(data=data[i]) だから私はそれd[k]が正しいパンダのデータフレームだと思います。 その後 for k in d.keys(): d[k].to_excel (file_name) 次に、エラーがあります: TypeError: got invalid input value of type <class 'xml.etree.ElementTree.Element'>, expected string or Element Python 3.7、pandas 0.25.3を使用しています。 更新:で置き換えると、コードは完全に実行to_excelされto_csvます。

3
遅いパンダDataFrame MultiIndex reindex
次の形式のパンダDataFrameがあります。 id start_time sequence_no value 0 71 2018-10-17 20:12:43+00:00 114428 3 1 71 2018-10-17 20:12:43+00:00 114429 3 2 71 2018-10-17 20:12:43+00:00 114431 79 3 71 2019-11-06 00:51:14+00:00 216009 100 4 71 2019-11-06 00:51:14+00:00 216011 150 5 71 2019-11-06 00:51:14+00:00 216013 180 6 92 2019-12-01 00:51:14+00:00 114430 19 7 92 2019-12-01 …

2
フィルタリングされたバイナリデカルト積を生成する
問題文 特定の排他的条件でフィルタリングされた完全なバイナリデカルト積(TrueとFalseの特定の数の列のすべての組み合わせを含むテーブル)を生成する効率的な方法を探しています。たとえば、3列/ビットの場合n=3、完全なテーブルを取得します df_combs = pd.DataFrame(itertools.product(*([[True, False]] * n))) 0 1 2 0 True True True 1 True True False 2 True False True 3 True False False ... これは、次のように相互に排他的な組み合わせを定義する辞書によってフィルタリングされることになっています。 mutually_excl = [{0: False, 1: False, 2: True}, {0: True, 2: True}] ここで、キーは上の表の列を示しています。例は次のように読み取られます。 0がFalseで1がFalseの場合、2をTrueにすることはできません 0がTrueの場合、2をTrueにすることはできません これらのフィルターに基づいて、予想される出力は次のとおりです。 0 1 2 1 True …

1
pandasUDFおよびpyarrow 0.15.0
最近pyspark、EMRクラスターで実行されている多数のジョブで多数のエラーが発生し始めました。エラーは java.lang.IllegalArgumentException at java.nio.ByteBuffer.allocate(ByteBuffer.java:334) at org.apache.arrow.vector.ipc.message.MessageSerializer.readMessage(MessageSerializer.java:543) at org.apache.arrow.vector.ipc.message.MessageChannelReader.readNext(MessageChannelReader.java:58) at org.apache.arrow.vector.ipc.ArrowStreamReader.readSchema(ArrowStreamReader.java:132) at org.apache.arrow.vector.ipc.ArrowReader.initialize(ArrowReader.java:181) at org.apache.arrow.vector.ipc.ArrowReader.ensureInitialized(ArrowReader.java:172) at org.apache.arrow.vector.ipc.ArrowReader.getVectorSchemaRoot(ArrowReader.java:65) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:162) at org.apache.spark.sql.execution.python.ArrowPythonRunner$$anon$1.read(ArrowPythonRunner.scala:122) at org.apache.spark.api.python.BasePythonRunner$ReaderIterator.hasNext(PythonRunner.scala:406) at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:37) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec$$anon$2.<init>(ArrowEvalPythonExec.scala:98) at org.apache.spark.sql.execution.python.ArrowEvalPythonExec.evaluate(ArrowEvalPythonExec.scala:96) at org.apache.spark.sql.execution.python.EvalPythonExec$$anonfun$doExecute$1.apply(EvalPythonExec.scala:127)... それらはすべてapplyパンダシリーズの機能で発生するようです。私が見つけた唯一の変更は、pyarrow土曜日(05/10/2019)に更新されたものです。テストは0.14.1で動作するようです だから私の質問は、これが新しく更新されたpyarrowのバグであるかどうか、またはpandasUDFを将来使用しにくくする重要な変更があるかどうかを誰かが知っているかどうかです。

5
リストで見つかったIDをpandasデータフレームの新しい列に追加する
次のデータフレームがあるとしましょう(整数の列と整数のリストの列)... ID Found_IDs 0 12345 [15443, 15533, 3433] 1 15533 [2234, 16608, 12002, 7654] 2 6789 [43322, 876544, 36789] また、IDの個別のリスト... bad_ids = [15533, 876544, 36789, 11111] それを考慮して、df['ID']列とインデックスを無視して、bad_idsリスト内のIDのいずれかがdf['Found_IDs']列で言及されているかどうかを確認します。これまでのコードは次のとおりです。 df['bad_id'] = [c in l for c, l in zip(bad_ids, df['Found_IDs'])] これは機能しますが、bad_idsリストがデータフレームよりも長く、実際のデータセットの場合、bad_idsリストはデータフレームよりもはるかに短くなります。bad_idsリストを2つの要素のみに設定した場合... bad_ids = [15533, 876544] 私は非常に人気のあるエラーを受け取ります(同じエラーで多くの質問を読みました)... ValueError: Length of values does not …

9
1列のパンダからNxN行列を作成する
各行にリスト値があるデータフレームがあります。 id list_of_value 0 ['a','b','c'] 1 ['d','b','c'] 2 ['a','b','c'] 3 ['a','b','c'] 1つの行と他のすべての行に対してスコアを計算する必要があります たとえば: Step 1: Take value of id 0: ['a','b','c'], Step 2: find the intersection between id 0 and id 1 , resultant = ['b','c'] Step 3: Score Calculation => resultant.size / id.size すべてのIDについて、ID 0とID 1,2,3の間でステップ2,3を繰り返します。 N x Nデータフレームを作成します。このような: …
11 python  pandas  numpy 

1
Pythonから生成された動的ループからnull値を削除する方法は?
私はこのようなデータフレームを持っています: ORDER_NO 2401 2504 2600 2020020 2019-12-04 2019-12-10 2019-12-12 2020024 2019-12-25 NaN 2019-12-20 2020034 NaN NaN 2019-12-20 2020020 2019-12-12 2019-12-15 2019-12-18 上記のデータフレームからXMLを作成しています。XMLに入力されているnull値を削除します。私のコードは、特定の列と行の値をXMLから削除する必要があります。 私のコード header = """<ORD>{}</ORD>""" body =""" <osi:ORDSTSINF types:STSCDE="{}"> <DTM>{}</DTM>""" cols = df.columns for row in df.itertuples(): with open(f'{row[1]}.xml', 'w') as f: f.write(header.format(row[1])) for c, r in zip(row[2:], cols[1:]): …

3
パンダは、1つの列の値の条件に基づいて、一度に複数の列の値を上書きします
私はそのようなDataFrameを持っています: df = pd.DataFrame(data={ 'col0': [11, 22,1, 5] 'col1': ['aa:a:aaa', 'a:a', 'a', 'a:aa:a:aaa'], 'col2': ["foo", "foo", "foobar", "bar"], 'col3': [True, False, True, False], 'col4': ['elo', 'foo', 'bar', 'dupa']}) col1の ":"で分割した後、リストの長さを取得したい場合、長さ> 2の場合は値を上書きするか、長さ<= 2の場合は値を上書きしないようにします。 理想的には、1行でできるだけ速く。 現在、私は試みますが、それはValueErrorを返します。 df[['col1', 'col2', 'col3']] = df.loc[df['col1'].str.split(":").apply(len) > 2], ("", "", False), df[['col1', 'col2', 'col3']]) 編集:col1の条件。EDIT2:すべての素晴らしくて迅速な回答に感謝します。すごい!EDIT3:10 ^ 6行のタイミング: …
11 python  pandas  apply 

2
正規表現で列を分割して、末尾のCAPSを別の列に移動するにはどうすればよいですか?
正規表現を使用して列を分割しようとしていますが、正しく分割できないようです。末尾のCAPSをすべて取り出して、別の列に移動しようとしています。したがって、2〜4個のCAPSであるすべてのCAPSが連続して取得されます。ただし、列が空白になっている'Name'間だけ、列を離れ'Team'ます。 これが私のコードです: import pandas as pd url = "https://www.espn.com/nba/stats/player/_/table/offensive/sort/avgAssists/dir/desc" df = pd.read_html(url)[0].join(pd.read_html(url)[1]) df[['Name','Team']] = df['Name'].str.split('[A-Z]{2,4}', expand=True) これ欲しい: print(df.head(5).to_string()) RK Name POS GP MIN PTS FGM FGA FG% 3PM 3PA 3P% FTM FTA FT% REB AST STL BLK TO DD2 TD3 PER 0 1 LeBron JamesLA SF 35 35.1 24.9 9.6 …
11 python  regex  pandas 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.