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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

pandas

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

Q&A

解決済

2回答

4379閲覧

文字列, 数字, NaNが混在したデータフレーム(object型)から文字列や数字だけを抽出したい

mini1988

総合スコア56

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2018/06/05 12:36

困っていること

dataframe全体がobjectになっていて、各カラムには”見た目”として「文字列+NaN」、「数字+NaN」が存在しています。

このdataframeに対して、カラムが「文字列+NaN」の場合には、NaNを削除して「文字列」だけのリストを生成し、カラムが「数字+NaN」であればNaNを削除して「数字」だけをfloat型でnumpy arrayにしたいと考えています。

ただ、そもそも、各カラムが「文字列+NaN」なのか、それとも「数字+NaN」なのか、区別する方法が思いつきません。

dtype()でやるのかと思うのですが、dataframe全体に適用するとエラーが出ますし、、、解決できずに困っています。

どなたかご教示願えないでしょうか?お手数ですがよろしくお願いします。

Dataframeの中身

A列 B列 C列 D列 0 T26-2 0.1 NaN 10 1 T13126-3 0.1 NaN 5 2 T93126 0.1 NaN NaN 3 T1126-5 15 JUNC 10 4 T1326 0.1 MUI 15 5 NaN 0.1 NaN 10 6 T3126 0.8 NaN NaN 7 T17726 0.1 X 10.4 8 T1326 0.1 NaN 5.3 9 T1312 0.001 W 5.2 10 T112987 0.1 NaN NaN 11 X1126 0.1 NaN 7 12 NaN NaN JRF 8 13 TH1075-1 0.1 NaN 5 14 T14075-2 0.1 NaN 1.6 15 T1075-3 0.1 KIL 5.1 16 Z0075 0.02 NaN 11.7 17 T14075-5 0.1 MWR 13 18 NaN 0.1 NaN NaN 19 T14075-5 0.8 NaN 13 20 T14075-6 0.1 NaN 0.8

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

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

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

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

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

guest

回答2

0

ベストアンサー

dropnaした時にどこか1行は生き残るとすれば下記方法で文字列、数値に分離したカラム名を作成可能です。
あとはそのカラム名を使った内包表記でいかがでしょうか。

python

1# データはdfという名前だとして 2str_columns = df.columns[df.dropna().dtypes=='object'] 3float_columns = df.columns[df.dropna().dtypes=='float64'] 4 5str_list = [df[col].dropna().values.tolist() for col in str_columns] 6float_list = [df[col].dropna().values for col in float_columns]

投稿2020/07/24 22:30

tenkoh

総合スコア51

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

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

0

とりあえずドロップしました。

python

1import numpy as np 2import pandas as pd 3 4from io import StringIO 5 6s = ''' A列 B列 C列 D列 70 T26-2 0.1 NaN 10 81 T13126-3 0.1 NaN 5 92 T93126 0.1 NaN NaN 103 T1126-5 15 JUNC 10 114 T1326 0.1 MUI 15 125 NaN 0.1 NaN 10 136 T3126 0.8 NaN NaN 147 T17726 0.1 X 10.4 158 T1326 0.1 NaN 5.3 169 T1312 0.001 W 5.2 1710 T112987 0.1 NaN NaN 1811 X1126 0.1 NaN 7 1912 NaN NaN JRF 8 2013 TH1075-1 0.1 NaN 5 2114 T14075-2 0.1 NaN 1.6 2215 T1075-3 0.1 KIL 5.1 2316 Z0075 0.02 NaN 11.7 2417 T14075-5 0.1 MWR 13 2518 NaN 0.1 NaN NaN 2619 T14075-5 0.8 NaN 13 2720 T14075-6 0.1 NaN 0.8''' 28 29ss = StringIO(s) 30df = pd.read_csv(ss, sep='\s+', ) 31 32for col in df.columns: 33 arr = df[col].dropna().values 34 print(arr)

投稿2018/06/05 22:42

mkgrei

総合スコア8560

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問