【pandasのcsv基本操作】csvの読み取り 列行削除 xlsx出力


csvで読み込んだデータを自動で加工する業務が増えてきました。
そこで、最近はpandasを利用して自動化を最近お試してやってます。

時間開くとどうやって使うんだっけ・・・？と良くなるので自分のメモとして
pandasを利用したcsvの読み取り、列行削除、xlsxへの出力までの流れを簡単にまとめました

#CSVの読み込み
まず列の名前を適当につけます。
名前つけてread_csvしないとなぜかエラーに・・・
そのあと、pd.read_csvで読み込み。
engine=pythonをつけると名前が日本語のcsvでも読み取れます。


```python
import pandas as pd
col_names = [ 'c{0:02d}'.format(i) for i in range(11) ] #Name the column
df = pd.read_csv("./hoge.csv", engine='python', names=col_names) #file read
df.head(6)
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>c00</th>
      <th>c01</th>
      <th>c02</th>
      <th>c03</th>
      <th>c04</th>
      <th>c05</th>
      <th>c06</th>
      <th>c07</th>
      <th>c08</th>
      <th>c09</th>
      <th>c10</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>&lt; Measurement Data Text Output &gt;</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>None</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Date/Time</td>
      <td>@date()</td>
      <td>ch.1</td>
      <td>ch.2</td>
      <td>ch.3</td>
      <td>ch.4</td>
      <td>ch.5</td>
      <td>ch.6</td>
      <td>ch.7</td>
      <td>ch.8</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>2</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>ﾟC</td>
      <td>%RH</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>3</th>
      <td>2018/04/16 12:34'15</td>
      <td>43206.5237847222</td>
      <td>23.5000</td>
      <td>25.0000</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>4</th>
      <td>2018/04/16 12:36'15</td>
      <td>43206.5251736111</td>
      <td>23.6000</td>
      <td>25.0000</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
    <tr>
      <th>5</th>
      <td>2018/04/16 12:38'15</td>
      <td>43206.5265625000</td>
      <td>23.0000</td>
      <td>25.0000</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
      <td>NaN</td>
    </tr>
  </tbody>
</table>
</div>



#列の削除操作
4列目以降を削除します。

```python
drop_row = ['c{0:02d}'.format(i) for i in range(3,11)] #select row number
df = df.drop(drop_row, axis=1) #delete row
df.head(6)
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>c00</th>
      <th>c01</th>
      <th>c02</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>&lt; Measurement Data Text Output &gt;</td>
      <td>None</td>
      <td>None</td>
    </tr>
    <tr>
      <th>1</th>
      <td>Date/Time</td>
      <td>@date()</td>
      <td>ch.1</td>
    </tr>
    <tr>
      <th>2</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>ﾟC</td>
    </tr>
    <tr>
      <th>3</th>
      <td>2018/04/16 12:34'15</td>
      <td>43206.5237847222</td>
      <td>23.5000</td>
    </tr>
    <tr>
      <th>4</th>
      <td>2018/04/16 12:36'15</td>
      <td>43206.5251736111</td>
      <td>23.6000</td>
    </tr>
    <tr>
      <th>5</th>
      <td>2018/04/16 12:38'15</td>
      <td>43206.5265625000</td>
      <td>23.0000</td>
    </tr>
  </tbody>
</table>
</div>



#行の削除操作
1,2行を削除します。

```python
df = df.drop([0,1], axis=0)#delete col
df.head(6)
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>c00</th>
      <th>c01</th>
      <th>c02</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>2</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>ﾟC</td>
    </tr>
    <tr>
      <th>3</th>
      <td>2018/04/16 12:34'15</td>
      <td>43206.5237847222</td>
      <td>23.5000</td>
    </tr>
    <tr>
      <th>4</th>
      <td>2018/04/16 12:36'15</td>
      <td>43206.5251736111</td>
      <td>23.6000</td>
    </tr>
    <tr>
      <th>5</th>
      <td>2018/04/16 12:38'15</td>
      <td>43206.5265625000</td>
      <td>23.0000</td>
    </tr>
    <tr>
      <th>6</th>
      <td>2018/04/16 12:40'15</td>
      <td>43206.5279513889</td>
      <td>22.7000</td>
    </tr>
    <tr>
      <th>7</th>
      <td>2018/04/16 12:42'15</td>
      <td>43206.5293402778</td>
      <td>22.7000</td>
    </tr>
  </tbody>
</table>
</div>



#行番号振り直し
行を削除して番号がバラバラだとあとあと面倒になりそうなので、番号振り直し

```python
df = df.reset_index(drop=True) #Renumber
df.head(6)
```




<div>
<style scoped>
    .dataframe tbody tr th:only-of-type {
        vertical-align: middle;
    }

    .dataframe tbody tr th {
        vertical-align: top;
    }

    .dataframe thead th {
        text-align: right;
    }
</style>
<table border="1" class="dataframe">
  <thead>
    <tr style="text-align: right;">
      <th></th>
      <th>c00</th>
      <th>c01</th>
      <th>c02</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>0</th>
      <td>NaN</td>
      <td>NaN</td>
      <td>ﾟC</td>
    </tr>
    <tr>
      <th>1</th>
      <td>2018/04/16 12:34'15</td>
      <td>43206.5237847222</td>
      <td>23.5000</td>
    </tr>
    <tr>
      <th>2</th>
      <td>2018/04/16 12:36'15</td>
      <td>43206.5251736111</td>
      <td>23.6000</td>
    </tr>
    <tr>
      <th>3</th>
      <td>2018/04/16 12:38'15</td>
      <td>43206.5265625000</td>
      <td>23.0000</td>
    </tr>
    <tr>
      <th>4</th>
      <td>2018/04/16 12:40'15</td>
      <td>43206.5279513889</td>
      <td>22.7000</td>
    </tr>
    <tr>
      <th>5</th>
      <td>2018/04/16 12:42'15</td>
      <td>43206.5293402778</td>
      <td>22.7000</td>
    </tr>
  </tbody>
</table>
</div>



#xlsx形式で出力する


```python
import openpyxl
df.to_excel('./test.xlsx', index=False, header=False) #file save
```


　　
　　
#まとめ

```python
import pandas as pd
col_names = [ 'c{0:02d}'.format(i) for i in range(11) ] #Name the column
df = pd.read_csv("./hoge.csv", engine='python', names=col_names) #file read

drop_row = ['c{0:02d}'.format(i) for i in range(3,11)] #select row number
df = df.drop(drop_row, axis=1) #delete row

df = df.drop([0,1], axis=0)#delete col
df = df.reset_index(drop=True) #Renumber

import openpyxl
df.to_excel('./test.xlsx', index=False, header=False) #file save


```