Import CSV to pandas with two delimiters
<p>I have a CSV with two delimiters (<code>;</code>) and (<code>,</code>) it looks like this:</p>

<pre><code>vin;vorgangid;eventkm;D_8_lamsoni_w_time;D_8_lamsoni_w_value
V345578;295234545;13;-1000.0,-980.0;7.9921875,11.984375
V346670;329781064;13;-960.0,-940.0;7.9921875,11.984375
</code></pre>

<p>I want to import it into a pandas data frame, with the (<code>;</code>) acting as a column separator and (<code>,</code>) as a separator for a <code>list</code> or <code>array</code> using <code>float</code> as data type. So far I am using this method, but I am sure there is something easier out there.</p>

<pre><code>aa=0;
csv_import=pd.read_csv(folder+FileName, ';')
for col in csv_import.columns:
aa=aa+1
if type(csv_import[col][0])== str and aa&gt;3:
    # string to list of strings
    csv_import[col]=csv_import[col].apply(lambda x:x.split(','))
    # make the list of stings into a list of floats
    csv_import[col]=csv_import[col].apply(lambda x: [float(y) for y in x])
</code></pre>

<p>first read CSV using <code>;</code> as a delimiter:</p>

<pre><code>df = pd.read_csv(filename, sep=';')
</code></pre>

<p><strong>UPDATE:</strong></p>

<pre><code>In [67]: num_cols = df.columns.difference(['vin','vorgangid','eventkm'])

In [68]: num_cols
Out[68]: Index(['D_8_lamsoni_w_time', 'D_8_lamsoni_w_value'], dtype='object')

In [69]: df[num_cols] = (df[num_cols].apply(lambda x: x.str.split(',', expand=True)
   ....:                                               .stack()
   ....:                                               .astype(float)
   ....:                                               .unstack()
   ....:                                               .values.tolist())
   ....:                )

In [70]: df
Out[70]:
       vin  vorgangid  eventkm D_8_lamsoni_w_time     D_8_lamsoni_w_value
0  V345578  295234545       13  [-1000.0, -980.0]  [7.9921875, 11.984375]
1  V346670  329781064       13   [-960.0, -940.0]  [7.9921875, 11.984375]

In [71]: type(df.ix[0, 'D_8_lamsoni_w_value'][0])
Out[71]: float
</code></pre>

<p><strong>OLD answer:</strong></p>

<p>Now we can split numbers into lists in the "number" columns:</p>

<pre><code>In [20]: df[['D_8_lamsoni_w_time',  'D_8_lamsoni_w_value']] = \
    df[['D_8_lamsoni_w_time',  'D_8_lamsoni_w_value']].apply(lambda x: x.str.split(','))
In [21]: df
Out[21]:
       vin  vorgangid  eventkm D_8_lamsoni_w_time     D_8_lamsoni_w_value
0  V345578  295234545       13  [-1000.0, -980.0]  [7.9921875, 11.984375]
1  V346670  329781064       13   [-960.0, -940.0]  [7.9921875, 11.984375]
</code></pre>

python csv pandas delimiter csv-import