2017-09-23 161 views
2

我有一個列和一個原始的Csv文件。該列有143個值(所有數字),我想分割列,以便每個值都有自己的列(即143列)python拆分列

我該怎麼用Python做到這一點?

所以這就是它在csv文件中的樣子。訪問次數代表日期,所以1是星期一,2是星期二,依此類推。

ID    visits 



34   12555566 

I want to separate them so it looks like this 

ID  visits  0   1 



34   1  2  5 

0和1只是列名。

下面是我使用的代碼到目前爲止

import pandas as pd 
file=pd.read_csv('trialtr.csv') 

import calendar 
days = list(calendar.day_name) 

data = [] 
with open('trialtr.csv', 'r') as fh: 
    for line in fh: 
    data.append(line.split()) 

data = dict(zip(*data)) 
d = {day: v for (day, v) in [(day,[int(c)]) for day, c in zip(days, 
data['visits'][1:])]} 
d['ID'] = data['ID'] 
d['visits'] = data['visits'][0] 
data = pd.DataFrame(d) 

我最終得到這個錯誤: 「ValueError異常:詞典更新序列元素#0的長度爲1000; 2,需要

+0

您能創建一個具有某些值的示例(不是143請!)? – PRMoureu

+0

這143個值由什麼分開?這是一個列表嗎?一個由空格分隔的字符串? – sheldonzy

+0

他們沒有分開。他們看起來像這樣34545 – Supern92

回答

0

使用此碼到您轉換成邏輯代碼,但是這個代碼也將轉換行的列值。

import csv 
from itertools import izip 
a = izip(*csv.reader(open("input.csv", "rb"))) 
csv.writer(open("output.csv", "wb")).writerows(a) 
+0

謝謝,但它在python 3.6中工作嗎?我得到這個錯誤「無法導入名稱」izip' – Supern92

+0

PIP安裝izip –

+2

不要在python3中使用izip,只需使用zip – acushner

0
import pandas as pd 
import calendar 
days = list(calendar.day_name) 

data = [] 
with open('test.csv', 'r') as fh: 
    for line in fh: 
     data.append(line.split()) 

data = dict(zip(*data)) 
d = {day: v for (day, v) in [(day,[int(c)]) for day, c in zip(days, data['visits'][1:])]} 
d['ID'] = data['ID'] 
d['visits'] = data['visits'][0] 
data = pd.DataFrame(d) 

編輯 稍微改進它以獲取具有指定列的DataFrame用於一週的幾天。如果你不想這樣做,只需用範圍(7)替換days變量(012)

儘管如此,我認爲你的想法不起作用。如果你一天有11次觀看?並且訪問列中的第一個數字:不應該是總訪問量的總和(否則爲什麼會有8個數字?)

+0

謝謝,但我得到「ValueError:字典更新序列元素#0具有長度1000; 2是必需的「 – Supern92

+0

適用於我,但我沒有你的源文件,你還使用哪個python? – Yorian

+0

因此,這些日子指的是在143周的過程中的一週中的第一天,例如234. In第一週的顧客在星期一訪問了2,第二週是3,這意味着第二週顧客在星期二訪問了我想提取的例子如果我想知道第三週星期他們是什麼時間第三週將是第三列,我希望我有道理,我將用我使用的代碼進行更新 – Supern92