2017-05-16 11 views
0

に取り込み、Excelのスプレッドシートで2つのセルからデータを取り込み、csvファイルに入れようとすると問題が発生しました。データは緯度および経度座標であるため、それらはプログラムによって読み取られるために並んでいる必要があります。ここでは、私が持っているものです。2つのXLXSセルから2つのXLXSセルのデータをcsv

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

import xlwt 
import xlrd 
import csv 
import os, openpyxl, glob 
from openpyxl import Workbook 


with open ('test.csv', 'wb') as csvfile: 
    spamwriter = csv.writer(csvfile, delimiter=',') 

    for file in glob.glob ("/test"): 
    wb = openpyxl.load_workbook('test-data.xlsx') 
    ws = wb.active 
    def lat(): 
     for row in ws.iter_rows('Q2:Q65536'): 
     for cell in row: 
      lat = cell.value 
      return lat 
    def lon(): 
     for row in ws.iter_rows('R2:R65536'): 
     for cell in row: 
      lon = cell.value 
      return lon 

    cord=lat()+","+lon() 
    print (lat()+","+lon()) #just to see if its working 
    #spamwriter.writerow([cord]) uncomment to write to file 

それは私だけのデータの最初の行でない行(テストデータは約1500行を持っている)の残りの部分を提供しますが。どのように私はそれがファイルを通過して完了するだろうか?

+0

これは、それはあなたが読んでいるCSVだとしてタグエクセルで何をすべきかわかりません。私はPythonの知識はありませんが、FORにはNEXTやループを囲むものがありませんか? – Andreas

答えて

0

これは最も動的な方法ではないかもしれませんが、私はこの作業にパンダを使用します。それはpd.read_excel()pd.to_csv()の機能を内蔵しています。

import pandas as pd 
import string 

latColumn = string.lowercase.index('q') # determine index that corresponds to Excel Column letter (user lower case) 
longColumn = string.lowercase.index('r') # Does not work for AA, BB, ... 

data = pd.read_excel('test-data.xlsx', 'Sheet1', parse_cols=[latColumn,longColumn]) 

# Total number of rows being read in 65536 - 2 = 65534 

csvOut = "foo.csv" 
data[:65534].to_csv(csvOut, index=False, header=False) 

あなたはそれを置き換えるファイルに追加し、必要がない場合は、変更data[:65534].to_csv(....)

open(csvOut, 'a') as f: #append to the .csv file of your likings 
    data[:65534].to_csv(f, index=False, header=False) 
+0

あなたは命の恩人です!本当にありがとう!悪いデータをキャッチする方法はありますか?いくつかの理由で、いくつかのセルには "None"があり、0に置き換えるか、削除する必要があります。 – stcoyle

+0

@stcoyle、 "None"の値をすべて0に置き換える場合は、その列を含む行を削除する場合は、data = data.replace(to_replace = "None"、value = 0) 'data = data [data.Lat!=" None "]'と 'data = data [data.Long!=" None "]' – nanoPhD

+0

私のtest.xlsxデータセットでは私の緯度と経度は " 「緯度」と「緯度」です。自分の名前が何であってもそれらを設定する必要があります。チェックアウト[リンク](http://stackoverflow.com/questions/18172851/deleting-dataframe-row-in-pandas-based-on-column-value) – nanoPhD

関連する問題