3

という名前の Python DataFrame にスプレッドシートをフェッチしdfます。

サンプルを挙げましょう:

df=pd.DataFrame({'a': np.random.rand(10), 'b': np.random.rand(10)})
df.columns=['a','a']

          a         a
0  0.973858  0.036459
1  0.835112  0.947461
2  0.520322  0.593110
3  0.480624  0.047711
4  0.643448  0.104433
5  0.961639  0.840359
6  0.848124  0.437380
7  0.579651  0.257770
8  0.919173  0.785614
9  0.505613  0.362737

私が走るとき、私df.columns.is_uniqueは得るFalse

列「a」の名前を「a_2」に自動的に変更したい(またはそのようなもの)

私はそのような解決策を期待していませんdf.columns=['a','a_2']

複数の列に使用できるソリューションを探しています!

4

5 に答える 5

12

列を手動で一意化できます。

df_columns = ['a', 'b', 'a', 'a_2', 'a_2', 'a', 'a_2', 'a_2_2']

def uniquify(df_columns):
    seen = set()

    for item in df_columns:
        fudge = 1
        newitem = item

        while newitem in seen:
            fudge += 1
            newitem = "{}_{}".format(item, fudge)

        yield newitem
        seen.add(newitem)

list(uniquify(df_columns))
#>>> ['a', 'b', 'a_2', 'a_2_2', 'a_2_3', 'a_3', 'a_2_4', 'a_2_2_2']
于 2013-09-28T21:17:55.563 に答える
-1

Oracle テーブルから DataFrame をロードするときに、この問題に遭遇しました。7stud は、pd.read_excel() が重複した列を *.1 で自動的に指定するのは正しいですが、すべての読み取り関数がこれを行うわけではありません。回避策の 1 つは、DataFrame を csv (または Excel) ファイルに保存してから再読み込みして、重複した列を再指定することです。

data = pd.read_SQL(SQL,connection)
data.to_csv(r'C:\temp\temp.csv')
data=read_csv(r'C:\temp\temp.csv')  
于 2015-10-22T18:02:36.913 に答える