5

これは、うまくいけばより意味のある私の質問の言い直されたバージョンです:

暗黙的read_csvなインデックス (つまり、ファイルの最初の列にヘッダーがない) を使用すると、すべてが機能し、インデックスがファイルの最初の列 (暗黙的なインデックス列) であるデータフレームが取得されます。

ただし、usecolsへの引数として指定するread_csvと、暗黙的なインデックス列は無視され、返されるデータフレームには pandas によって作成された標準インデックス (0、1、2、3 など) が含まれます。

リストのインデックス列を明示的に渡して引数usecolsを指定することはできませんindex_col。これは、暗黙的なインデックス列にはヘッダーがないためです (これが、パンダが暗黙的なインデックスであることを認識する方法です)。

これを回避する方法はありますか?

元の質問は次のとおりです。

名前のない行インデックスの列を持つ csv ファイルを読み取ろうとしています。残りの列には名前が付けられています。

       |head1|head2|
index1 | data1 | data2 |

usecols を使用して特定の数の列を読み取るときに、行インデックスも含めたいと考えています。ただし、これらには名前が付けられていないため、usecols のリストに文字列を含めることはできません。

整数インデックスと文字列の組み合わせを試してみました (たとえばusecols = [0, 'header1', 'header2']、これはうまくいかないようです。
単純ind_colに 0 を指定すると、選択範囲の最初の列がインデックス列として使用されます。

では、ファイル内の最初の名前のない列を行インデックスとして保持しながら、(usecols を介して) 名前列の選択を読み取るにはどうすればよいでしょうか?

4

3 に答える 3

4

最近、この同じ問題が発生し、パンダのデフォルトの無名メソッドを使用して解決できました。

data = pd.read_csv('advertising.csv', header=0, index_col=[0] , usecols=['Unnamed: 0', 'radio','sales'])
于 2020-02-14T18:36:47.623 に答える
3

usecols を使用せずに試してください。既知のバグがあり、これは,.

これらを直接読むことができます:

In [11]: pd.read_csv('foo.csv', sep='\s*\|\s*', index_col=[0])
Out[11]: 
        head1  head2  Unnamed: 3
index1  data1  data2         NaN

In [12]: pd.read_csv('foo.csv', sep='\s*\|\s*', index_col=[0]).dropna(axis=1)
Out[12]: 
        head1  head2
index1  data1  data2

注:スペースを含めないようにするため\s*|\s*だけでなく、sep として使用する必要がありました。|

于 2013-09-11T11:21:34.503 に答える
1

この質問を正しく理解していれば、csvファイル全体をデータフレームとして読み込んでから、必要な列を選択する必要があると思います....次のようなもの:

import pandas as pd
df = pd.read_csv(yourdata, index_col=0).loc[:,'header1']
于 2016-02-12T20:34:44.567 に答える