【追記しています】
実際に用いるデータテーブルで実行した場合、要素抽出でなく、リストの最初と最後の文字(今回の場合、括弧())が抽出されてしまいました。この投稿の最後に、詳細を追記します。
簡単な質問かもしれませんが、わからなかったため質問させてください。
前提・実現したいこと
あるデータテーブルについて、テーブル内のある列にリスト、もしくはタプルでデータを保持しています。
ID | Data | start | end |
---|---|---|---|
1 | (1,2,3,4,5) | ||
2 | (1,1,2,2,2) | ||
3 | (1,3,3,3,3,3,3,3,3,3,1,1,1,1,4,5) | ||
4 | (2,3) | ||
5 | (1,1,5) | ||
6 | (2,3,4) |
このData列のリスト、タプルの最初と最後のデータを取り出したいと考えています。
以下抽出後のイメージです。
ID | Data | start | end |
---|---|---|---|
1 | (1,2,3,4,5) | 1 | 5 |
2 | (1,1,2,2,2) | 1 | 2 |
3 | (1,3,3,3,3,3,3,3,3,3,1,1,1,1,4,5) | 1 | 5 |
4 | (2,3) | 2 | 3 |
5 | (1,1,5) | 1 | 5 |
6 | (2,3,4) | 2 | 4 |
単純なリスト、タプルからのデータ取り出しは、
tuple[0]
tuple[-1]
等の指定を行えばいいことは理解しています。
宜しくお願い致します。
【以下、追記部分】
canさんのプログラムを応用し、下記dataについて、最初と最後のデータを抽出しようとしましたが、うまくいきませんでした。
python_can_san
1import pandas as pd 2 3df = pd.DataFrame({'Data':[(1,2,3),(4,5)]}) 4df['start'] = df['Data'].apply(lambda x: x[0]) 5df['end'] = df['Data'].apply(lambda x: x[-1]) 6print(df)
処理前
ID | Data | start | end |
---|---|---|---|
1 | (1_1, 1_2, 1_3, 1_4) | ||
2 | (1_1, 1_2, 1_3) | ||
3 | (2_1, 1_2) | ||
4 | (1_1, 1_2, 1_3) | ||
5 | (1_1, 1_2) | ||
6 | (2_1, 1_2) |
以下の応用版では、リストの括弧が抜き出されてしまいます。
(データ自体をリストとして保管できていない??)
python_ouyouban
1import pandas as pd 2 3#csv読み込み 4#csv作成前 5df = pd.read_csv("trace_table_test.csv", header=0,) 6df['first_area'] = df['all_area'].apply(lambda x: x[0]) 7df['last_area'] = df['all_area'].apply(lambda x: x[-1]) 8print(df)
ID | Data | start | end |
---|---|---|---|
1 | (1_1, 1_2, 1_3, 1_4) | ( | ) |
2 | (1_1, 1_2, 1_3) | ( | ) |
3 | (2_1, 1_2) | ( | ) |
4 | (1_1, 1_2, 1_3) | ( | ) |
5 | (1_1, 1_2) | ( | ) |
6 | (2_1, 1_2) | ( | ) |
列指定の問題と考え、lambdaの後の値を書き換えましたが、次の文字・数値が抜き出されてしまうようです。
ID | Data | start | end |
---|---|---|---|
1 | (1_1, 1_2, 1_3, 1_4) | 1 | 4 |
2 | (1_1, 1_2, 1_3) | 1 | 3 |
3 | (2_1, 1_2) | 2 | 2 |
4 | (1_1, 1_2, 1_3) | 1 | 3 |
5 | (1_1, 1_2) | 1 | 2 |
6 | (2_1, 1_2) | 2 | 2 |
テストデータをExcelで作成、csv保存していることが問題かもしれません。。
コメントいただけると助かります。
回答1件
あなたの回答
tips
プレビュー