私はcsvファイルをpandas
に読み込んでいます。このcsvファイルは4列といくつかの行で構成されていますが、追加したいヘッダー行がありません。私は次のことを試みてきました:
Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')
しかし、コードを適用すると、次のエラーが発生します。
ValueError: Shape of passed values is (1, 1), indices imply (4, 1)
正確にはエラーの意味は何ですか?そして私のcsvファイル/ pandas dfにヘッダ行を追加するためのpythonのクリーンな方法は何でしょうか?
names
は read_csv
で直接使用できます。
names:array-like、デフォルトなし使用する列名のリスト。 fileにヘッダ行が含まれていない場合は、header = Noneを明示的に渡す必要があります。
Cov = pd.read_csv("path/to/file.txt", sep='\t',
names = ["Sequence", "Start", "End", "Coverage"])
下の行は期待通りには動きません。 Cov
はすでにデータフレームです。ファイルから読み取られるときに実際に4列あると仮定します。
Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"])
あるいは、header=None
でcsvを読み、df.columns
でそれを追加することもできます。
Cov = pd.read_csv("path/to/file.txt", sep='\t', header=None)
Cov.columns = ["Sequence", "Start", "End", "Coverage"]
col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)
これを行ったら、それを確認してください。それでも...
my_CSV_File.head()
それが役立つことを願っています...乾杯
コードを修正するには、[Cov]
をCov.values
に変更するだけで、pd.DataFrame
の最初のパラメータは多次元のnumpy
配列になります。
Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame(Cov.values, columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')
しかし最も賢い解決策は、pd.read_Excel
とheader=None
と一緒にnames=columns_list
を使うことです。
ヘッダー行をpandas DataFrameに追加する方法は?
考慮すべき2つのケースがあります。
ヘッダーのないDataFrameがあり、このデータがCSVからのものではない場合は、単に.columns
属性に割り当てます。
df.columns = ['x', 'y', 'z']
データがCSV/Excelからのものである場合は、names
属性を文書化された here として使用できます。
df = pd.read_csv('file.csv', header=None, names=['x', 'y', 'z'])
既にヘッダーのあるDataFrameがあり、別のレベルをヘッダーに追加してMultiIndex
を作成する場合は、次を使用できます。
# Setup
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df
A B
0 1 4
1 2 5
2 3 6
new_level = ['C', 'D']
df.columns = [new_level, df.columns]
# Similar to,
# df.columns = pd.MultiIndex.from_arrays([new_level, df.columns])
df
C D
A B
0 1 4
1 2 5
2 3 6
df.columns
MultiIndex(levels=[['C', 'D'], ['A', 'B']],
codes=[[0, 1], [0, 1]])
あるいは、単一のヘッダー(「foo」など)を追加する場合は、代わりにfrom_product
を使用します(より簡単です)。
df.columns = pd.MultiIndex.from_product([['foo'], df.columns])
df
foo
A B
0 1 4
1 2 5
2 3 6
CSVに保存すると、各列の上に「foo」が表示されることに注意してください。
df.to_csv('file.csv', index=False)
!cat file.csv
foo,foo
A,B
1,4
2,5
3,6