pythonで浮動小数点数を半分に分割する

split float numbers in half with python


質問 written by ivan_pozdeev @2015-02-12 07:27:08Z

: 0 : 1 : 776

Adobe acrobat proでPDFから変換されたcsvテーブルを扱っています。 何らかの理由で、ソフトウェアは117行ごとに繰り返しエラーを作成します。 「数値を複製および連結する」(行など)

7307 1 87.1

この種の何かに変換されます:

73077307 11 87187.1

これらの行をPythonで「修正」するにはどうすればよいですか? フロートを中央で分割し、前半を消去する必要があります。

切り捨てについていくつかのスレッドを読みましたが、それらのほとんどは小数点で浮動小数点数を分割するか、整数だけを扱う必要があります。 パンダのread_csv関数を使用してcsvを読み取るため、データ型はfloat64になります。

df = pd.read_csv('path/file.csv',sep=';',index_col='Rang', na_values=['NA'])
df.dropna(how="all", inplace=True) # drop empty rows (an additional issue)
df[(df.index >10000)]

EDIT1:コードを追加しました。1年に1時間に1行あるため、間違ったコードを特定できると思いました。 インデックスが365 * 24 = 8760より大きい行は間違っています。 しかし、今では十分ではありません。 データフレームをループでき、row(i + 1)のインデックス-row(i)のインデックスが1より大きい場合、修正が必要です。 しかし、私はpythonの初心者です。それをどのように書くかわかりませんが、それはある種の別の問題です。

Pythonバージョン2.7.8 Pandas v。0.14.1を使用しています

どうもありがとう!

コメント 1

文字列として扱う必要があります。

written by merlin2011 @2015-02-11 00:38:44Z

コメント 2

質問を編集して、現在これに使用しているコードを含めてください。質問の参照値を改善していただきありがとうございます!

written by ネイサンタギー @2015-02-11 00:39:27Z

コメント 3

まず第一の質問-そのようなデータを有効な数値どのように区別しますか?

written by ivan_pozdeev @2015-02-11 00:56:40Z

コメント 4

@ ivan_pozdeev、1年の1時間ごとに1時間ごとに生産するため、これは特定できます。インデックスは0から8760の間の数値でなければなりません。「間違ったもの」は必ずしもそうではありません。

written by ナブラ @2015-02-12 03:12:53Z

コメント 5

@ merlin2011文字列アプローチを試してみます。進捗状況を更新します。

written by ナブラ @2015-02-12 03:13:53Z

回答 1 written by ショーン・アズリン @2015-02-11 02:56:44Z
1

スペースで区切られた各単語をリストとして文字列として取得します。 そのリスト内の各アイテムについて、lenの単語が偶数か奇数かを確認します。 偶数の場合、単語を単語の右半分に置き換えます。 奇数の場合(右側に '。'があるため)、右半分を切り上げます(たとえば、9文字の単語の右端の5文字)。 各単語を置き換えるときにfloat64への変換を追加します。