Jak dodać wiersz nagłówka do pandy DataFrame

166

Czytam plik csv do pandas. Ten plik csv składa się z czterech kolumn i kilku wierszy, ale nie ma wiersza nagłówka, który chcę dodać. Próbowałem następujących rzeczy:

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')

Ale kiedy stosuję kod, pojawia się następujący błąd:

ValueError: Shape of passed values is (1, 1), indices imply (4, 1)

Co dokładnie oznacza błąd? A jaki byłby czysty sposób w Pythonie, aby dodać wiersz nagłówka do mojego pliku csv / pandas df?

sequence_hard
źródło
Oto inna interpretacja twojego pytania: Dodaj kolejny nagłówek do istniejącej Dataframe, aby utworzyć MultiIndex.
cs95

Odpowiedzi:

257

Możesz użyć namesbezpośrednio wread_csv

nazwy: tablicowe, domyślne Brak Lista nazw kolumn do użycia. Jeśli plik nie zawiera wiersza nagłówka, należy jawnie przekazać nagłówek = Brak

Cov = pd.read_csv("path/to/file.txt", 
                  sep='\t', 
                  names=["Sequence", "Start", "End", "Coverage"])
Leb
źródło
9
Będziesz się śmiał. Próbowałem tego, ale nie wiedziałem, że musisz umieścić nawiasy kwadratowe wokół nazw. Co jest logiczne z perspektywy czasu. Dziękuję Ci!
sequence_hard
Bez obaw, wszyscy popełniliśmy te głupie błędy. Ja też jestem im winny.
Leb
@Leb, miałem dokładnie ten sam problem i wypróbowałem twoje rozwiązanie. Mam nagłówki tabeli, ale pierwszy wiersz został również zastąpiony tymi samymi nazwami nagłówków. Co mam teraz zrobić?
007mrviper
dodaje więcej kolumn do moich danych, wszystkie z NaNatrybutami. To dlatego, że moim separatorem jest pusta przestrzeń.
SalahAdDin
128

Alternatywnie możesz przeczytać csv za pomocą, header=Nonea następnie dodać go za pomocą df.columns:

Cov = pd.read_csv("path/to/file.txt", sep='\t', header=None)
Cov.columns = ["Sequence", "Start", "End", "Coverage"]
Anton Protopopov
źródło
15
col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

zrobiwszy to, po prostu sprawdź to z [oczywiście, że wiem, ty to wiesz. Ale nadal ...

my_CSV_File.head()

Mam nadzieję, że to pomoże ... Pozdrawiam

Bhardwaj Joshi
źródło
Sformatuj kod za pomocą {}przycisku. Wcięcie ma znaczenie.
Pan T
7

Aby naprawić kod, możesz po prostu zmienić [Cov]na Cov.values, pierwszy parametr pd.DataFramestanie się numpytablicą wielowymiarową :

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')

Ale najmądrzejsze rozwiązanie nadal jest używane pd.read_excelz header=Nonei names=columns_list.

romulomadu
źródło
Kiedy podajemy column_list, czy możemy dodać domyślne wartości dla wybranych kolumn?
Chintan Gotecha