Reputation: 2077
I have a CSV file to be read by pandas, and it has the form as following:
name, quart2c, p_rat, other_col
avg, 1, 2, 3
std, 1, 2, 3
I want to pandas.read_csv()
guarantee that all cells have the type of float32, except the first column('name') because that is the index column.
Hence I pass two args to it like this:
pandas.read_csv(file_path, index_col=0, dtype=np.float32)
# or like this, both failed
pandas.read_csv(file_path, index_col='name', dtype=np.float32)
But pandas still tries to convert the first column to float, and raises a exception:
ValueError: could not convert string to float: 'avg'
What I want:
dtype=np.float32
, so as to check whether there are any error values. I don't want the values be interpreted to integer type also.index_col
, since it will be used later. This column should NOT be cut off anyway.How should I get it?
Upvotes: 1
Views: 1490
Reputation: 11657
Best is to first read in the csv with default args, giving index col, and then convert the entire df (which will not affect the index):
pd.read_csv(file_path, index_col='name').astype(float)
Upvotes: 1
Reputation: 38552
you can try this way with dtype
and converters
.
import pandas as pd
df = pd.read_csv('test.csv', dtype = 'float32', converters = {'name': str},index_col='name')
print(df)
Output:
quart2c p_rat other_col
name
avg 1.0 2.0 3.0
std 1.0 2.0 3.0
Upvotes: 0