質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

1573閲覧

pandas データソートと特定項目データを抽出し結果をprintしたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2019/08/22 11:29

編集2019/08/22 12:42

#追記

uidは正しく抽出されましたがtime4が正しく降順になっておりませんでした。
具体的にはtime4をご覧ください。
8月7日はきれいに降順になっているようにみえるのですが下から5行は
8月13日
8月22日
8月1日
8月11日
と降順ではなくランダム?に並んでしまいます。time3はややこしいので消してます。
※最終行を1行追加し合計したから5行の挙動が降順となりません

csv_imported = csv_imported[csv_imported['uid'] == 'idsample'].sort_values('time4', ascending=False)
uid2time3time4567
idsample-Wed Aug 07 2019 16:38:47 GMT+0900 (JST)
idsample-Wed Aug 07 2019 16:38:21 GMT+0900 (JST)
idsample-Wed Aug 07 2019 16:37:53 GMT+0900 (JST)
idsample-Wed Aug 07 2019 16:37:42 GMT+0900 (JST)
idsample-Wed Aug 07 2019 16:37:24 GMT+0900 (JST)
idsample-Wed Aug 07 2019 16:37:13 GMT+0900 (JST)
idsample-Wed Aug 07 2019 16:36:47 GMT+0900 (JST)
idsample-Wed Aug 07 2019 16:36:41 GMT+0900 (JST)
idsample-Tue Aug 13 2019 20:58:05 GMT+0900 (JST)
idsample-Thu Aug 22 2019 21:21:51 GMT+0900 (JST)
idsample-Thu Aug 01 2019 00:35:57 GMT+0900 (JST)
idsample-Sun Aug 11 2019 13:51:33 GMT+0900 (JST)
idsample-Sat Aug 17 2019 12:43:54 GMT+0900 (JST)

pandas初心者です。2つ実現できないことがあります。よろしくお願いいたします。

#以下対象データ 現状

uid2time3time4567
idhoge2019/8/1 0:35Thu Aug 01 2019 00:35:57 GMT+0900 (JST)
idhoge2019/8/1 0:36Thu Aug 01 2019 00:36:57 GMT+0900 (JST)
idsample2019/8/1 0:37Thu Aug 01 2019 00:37:57 GMT+0900 (JST)
idsample2019/8/1 0:38Thu Aug 01 2019 00:38:57 GMT+0900 (JST)
idsample2019/8/1 0:39Thu Aug 01 2019 00:39:57 GMT+0900 (JST)

time3とtime4にはソートしやすい表記があるのかもしれないと思いそれぞれ異なる時間表記を調べて設定してみました。
例)以下例のように2つ表記があります。
2019/8/1 0:35
Thu Aug 01 2019 00:35:57 GMT+0900 (JST)

データを確認頂きましたのでやりたいことについて説明させて頂きます。

#やりたいこと1:time3、またはtime4いずれかの項目を用いて降順して
#やりたいこと2:そのうえで特定のuidのみを抽出したデータをprintしたい

#具体的に実現したいデータ 上記1と2を実施して今回実現目標となる抽出結果データ

要件
timeはtime3またはtime4いずれかの降順を指定
uidはidsampleのみを抽出とします。

uid2time3time4567
idsample2019/8/1 0:39Thu Aug 01 2019 00:39:57 GMT+0900 (JST)
idsample2019/8/1 0:38Thu Aug 01 2019 00:38:57 GMT+0900 (JST)
idsample2019/8/1 0:37Thu Aug 01 2019 00:37:57 GMT+0900 (JST)

このように「idsampleだけ抽出されて」「timeがソート降順になるように」以下コードを書きかえたいです。

#現状コード

import pandas as pd # headerdef csvheader = ["uid", "2", "time3", "time4", "5", "6", "7"] # read csv from web csv_imported = pd.read_csv("hogeeeen.com", names=csvheader) # time sort   csv_importe.sort_values(by=["time4"], ascending=False) # csv_imported = sort(csv_imported.time3) # This now sorts in date order # csv_imported = sort(csv_imported.time4) # This now sorts in date order # user extraction targetuid = 'idsample' csv_imported[csv_imported['uid'] = targetuid]) print(csv_imported)

拙いソースですがよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/08/22 11:38

コードは実行してみましたか?
退会済みユーザー

退会済みユーザー

2019/08/22 11:49 編集

はい。実行しましたがエラーが出て通りませんでした。 csv_imported[csv_imported['uid'] == targetuid]) ^ SyntaxError: invalid syntax csv_importe.sort_values(by=["time4"], ascending=True) と試してみましたがうまくいきませんでした。
can110

2019/08/22 12:45

'time4'列のデータ型は何でしょうか?「csv_imported.info()」の結果を提示ください。 「object=文字列」型なら単純に文字列としてソートされてしまいます。
退会済みユーザー

退会済みユーザー

2019/08/22 12:46

畏まりました。少々お待ちください。
退会済みユーザー

退会済みユーザー

2019/08/22 12:48

データ型は全てオブジェクトでした。
can110

2019/08/22 12:57

オブジェクト=文字列なら「曜日 ~」といった文字列なので適切に並びません。 回答追記した内容を確認ください。
退会済みユーザー

退会済みユーザー

2019/08/22 13:01 編集

csv_imported['time4'] = pd.to_datetime(csv_imported['time4']) で print(csv_imported.dtypes) をしたところ time4 datetime64[ns, pytz.FixedOffset(-540)] と出ましたが抽出結果は変わらずソートされていませんでした。
meg_

2019/08/22 12:59

csv_imported = pd.to_datetime(csv_imported['time4])してからソートしてみてはどうでしょうか?
can110

2019/08/22 13:02

'time02'とは新たに出てきた列ですね。どんなデータ内容なのか不明です。 ちょっとこの質問ではごちゃごちゃしてきたので、別途質問を立てたほうがよいかと思います。 その際には第三者がそのまま実行、検証できるデータ+コードを提示してください。
退会済みユーザー

退会済みユーザー

2019/08/22 13:05

そうですね。新しく質問いまたてますね。time02記載間違いです。すみません。
guest

回答2

0

時刻がオブジェクト型になってるんじゃないでしょうか
時刻のソートに関してはpd.to_datetimeでカラムの型変換してソートすれば良いと思います。
下記など参考になるかと
https://stackoverflow.com/questions/28161356/sort-pandas-dataframe-by-date

投稿2019/08/22 11:54

pea

総合スコア419

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/22 14:23 編集

ありがとうございます。大変参考になるURLでしたので別レスをベストアンサーとします。
guest

0

ベストアンサー

uid1の行を抽出しtimeの降順に並べるコード例です。ソートは抽出の後にします。

Python

1import pandas as pd 2 3df = pd.DataFrame({'uid':[1,2,1],'time':['2019/8/1 0:35','2019/8/1 0:36', '2019/8/1 0:37']}) 4df['time'] = pd.to_datetime(df['time']) 5 6df = df[df['uid'] == 1].sort_values('time', ascending=False) 7print(df) 8# uid time 9#2 1 2019-08-01 00:37:00 10#0 1 2019-08-01 00:35:00

追記

なお、timeの列はpd.to_datetimeで適切にdatetime型に変換できる列を指定してください。
提示されたデータでいえばtime3が適切です。
もしかしたらtime4も変換できるかもしれませんがこちらの環境では試してません。

投稿2019/08/22 11:51

編集2019/08/22 12:55
can110

総合スコア38233

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/08/22 11:53

ありがとうございます。自分の方でいま試してみますので、自分で試してまた質問させていただきます。
退会済みユーザー

退会済みユーザー

2019/08/22 12:05

できました。丁寧で完結な回答を頂きましてありがとうございました。今後ともよろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2019/08/22 12:24

すみません。よく見た所同一日付の中では降順がされていましたが正しく表示されていませんでした。質問させていただいて宜しいでしょうか?
can110

2019/08/22 12:29

はい。質問本文に追記のカタチで質問ください。 そのさいには、この回答コードのようにサンプルデータも含めて実行できるようにしてもらえると助かります。
退会済みユーザー

退会済みユーザー

2019/08/22 12:34

お手数をおかけいたします。質問の一番最初に追記という形で記載させて頂きました。time4でソートをかけたのですがうまくいかない状況です。よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2019/08/22 13:00

>提示されたデータでいえばtime3が適切です。 了解いたしました。time3でいま試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問