manejo - Python-Escribir en hojas de cálculo de Excel
pandas python (8)
CSV significa valores separados por comas. CSV es como un archivo de texto y se puede crear simplemente agregando la extensión .CSV
por ejemplo escriba este código:
f = open(''example.csv'',''w'')
f.write("display,variable x")
f.close()
puedes abrir este archivo con excel.
Soy nuevo en Python. Necesito escribir algunos datos de mi programa en una hoja de cálculo. He buscado en línea y parece que hay muchos paquetes disponibles (xlwt, XlsXcessive, openpyxl). Otros sugieren escribir en un archivo csv (nunca usó csv y realmente no entiende de qué se trata).
El programa es muy simple. Tengo dos listas (flotante) y tres variables (cadenas). No conozco la longitud de las dos listas y probablemente no tengan la misma longitud.
Quiero que el diseño sea como en la imagen a continuación:
La columna rosa tendrá los valores de la primera lista y la columna verde tendrá los valores de la segunda lista.
Entonces, ¿cuál es la mejor manera de hacer esto? Gracias.
PD. Estoy ejecutando Windows 7 pero no necesariamente tendré Office instalado en las computadoras que ejecutan este programa.
EDITAR
import xlwt
x=1
y=2
z=3
list1=[2.34,4.346,4.234]
book = xlwt.Workbook(encoding="utf-8")
sheet1 = book.add_sheet("Sheet 1")
sheet1.write(0, 0, "Display")
sheet1.write(1, 0, "Dominance")
sheet1.write(2, 0, "Test")
sheet1.write(0, 1, x)
sheet1.write(1, 1, y)
sheet1.write(2, 1, z)
sheet1.write(4, 0, "Stimulus Time")
sheet1.write(4, 1, "Reaction Time")
i=4
for n in list1:
i = i+1
sheet1.write(i, 0, n)
book.save("trial.xls")
Escribí esto usando todas tus sugerencias. Hace el trabajo pero puede mejorarse ligeramente. ¿Cómo puedo formatear las células creadas en el ciclo for (valores list1) como científico o como número? No quiero truncar los valores. Los valores reales utilizados en el programa tendrían alrededor de 10 dígitos después del decimal.
Intente echar un vistazo a las siguientes bibliotecas también:
xlwings : para obtener datos dentro y fuera de una hoja de cálculo de Python, así como para manipular libros de trabajo y gráficos
ExcelPython : un complemento de Excel para escribir funciones definidas por el usuario (UDF) y macros en Python en lugar de VBA
La manera más fácil de importar los números exactos es agregar un decimal después de los números en su l1 y l2. Python interpreta este punto decimal como instrucciones de usted para incluir el número exacto. Si necesita restringirlo a algún lugar decimal, debería poder crear un comando de impresión que limite el resultado, algo simple como:
print variable_example [: 13]
Lo restringiría al décimo lugar decimal, suponiendo que sus datos tienen dos enteros a la izquierda del decimal.
Usa DataFrame.to_excel de pandas . Pandas le permite representar sus datos en estructuras de datos funcionalmente ricas y también le permitirá leer en archivos de Excel.
Primero tendrá que convertir sus datos en un DataFrame y luego guardarlos en un archivo Excel así:
In [1]: from pandas import DataFrame
In [2]: l1 = [1,2,3,4]
In [3]: l2 = [1,2,3,4]
In [3]: df = DataFrame({''Stimulus Time'': l1, ''Reaction Time'': l2})
In [4]: df
Out[4]:
Reaction Time Stimulus Time
0 1 1
1 2 2
2 3 3
3 4 4
In [5]: df.to_excel(''test.xlsx'', sheet_name=''sheet1'', index=False)
y el archivo de Excel que sale se ve así:
Tenga en cuenta que ambas listas deben ser de la misma longitud, de lo contrario, los pandas se quejarán. Para resolver esto, reemplace todos los valores perdidos con None .
openpyxl algunos módulos de Excel para Python, y descubrí que openpyxl es el mejor.
El libro gratuito Automate the Boring Stuff with Python tiene un capítulo sobre openpyxl con más detalles o puede consultar el sitio openpyxl . No necesitará Office o Excel instalado para usar openpyxl.
Tu programa se vería así:
import openpyxl
wb = openpyxl.load_workbook(''example.xlsx'')
sheet = wb.get_sheet_by_name(''Sheet1'')
stimulusTimes = [1, 2, 3]
reactionTimes = [2.3, 5.1, 7.0]
for i in range(len(stimulusTimes)):
sheet[''A'' + str(i + 6)].value = stimulusTimes[i]
sheet[''B'' + str(i + 6)].value = reactionTimes[i]
wb.save(''example.xlsx'')
import xlsxwriter
# Create an new Excel file and add a worksheet.
workbook = xlsxwriter.Workbook(''demo.xlsx'')
worksheet = workbook.add_worksheet()
# Widen the first column to make the text clearer.
worksheet.set_column(''A:A'', 20)
# Add a bold format to use to highlight cells.
bold = workbook.add_format({''bold'': True})
# Write some simple text.
worksheet.write(''A1'', ''Hello'')
# Text with formatting.
worksheet.write(''A2'', ''World'', bold)
# Write some numbers, with row/column notation.
worksheet.write(2, 0, 123)
worksheet.write(3, 0, 123.456)
# Insert an image.
worksheet.insert_image(''B5'', ''logo.png'')
workbook.close()
import xlwt
def output(filename, sheet, list1, list2, x, y, z):
book = xlwt.Workbook()
sh = book.add_sheet(sheet)
variables = [x, y, z]
x_desc = ''Display''
y_desc = ''Dominance''
z_desc = ''Test''
desc = [x_desc, y_desc, z_desc]
col1_name = ''Stimulus Time''
col2_name = ''Reaction Time''
#You may need to group the variables together
#for n, (v_desc, v) in enumerate(zip(desc, variables)):
for n, v_desc, v in enumerate(zip(desc, variables)):
sh.write(n, 0, v_desc)
sh.write(n, 1, v)
n+=1
sh.write(n, 0, col1_name)
sh.write(n, 1, col2_name)
for m, e1 in enumerate(list1, n+1):
sh.write(m, 0, e1)
for m, e2 in enumerate(list2, n+1):
sh.write(m, 1, e2)
book.save(filename)
para más explicaciones: https://github.com/python-excel
xlrd / xlwt (estándar): Python no tiene esta funcionalidad en su biblioteca estándar, pero creo que xlrd/xlwt es la forma "estándar" de leer y escribir archivos de Excel. Es bastante fácil crear un libro de trabajo, agregar hojas, escribir datos / fórmulas y formatear celdas. Si necesita todas estas cosas, puede tener el mayor éxito con esta biblioteca. Creo que podrías elegir openpyxl en su lugar y sería bastante similar, pero no lo he usado.
Para formatear celdas con xlwt, defina un
XFStylee incluya el estilo cuando escriba en una hoja. Aquí hay un ejemplo con muchos formatos numéricos . Vea el código de ejemplo a continuación.Tablib (poderoso, intuitivo): Tablib es una biblioteca más poderosa pero intuitiva para trabajar con datos tabulares. Puede escribir libros de trabajo de Excel con varias hojas y otros formatos, como csv, json y yaml. Si no necesita celdas formateadas (como el color de fondo), se hará un favor para usar esta biblioteca, lo que lo llevará más lejos en el largo plazo.
csv (fácil): los archivos en su computadora son de texto o binarios . Los archivos de texto son solo caracteres, incluidos los especiales, como nuevas líneas y pestañas, y se pueden abrir fácilmente en cualquier lugar (por ejemplo, bloc de notas, su navegador web o productos de Office). Un archivo csv es un archivo de texto que está formateado de cierta manera: cada línea es una lista de valores, separados por comas. Los programas de Python pueden leer y escribir textos con facilidad, por lo que un archivo csv es la manera más fácil y rápida de exportar datos de su programa python a excel (u otro programa python).
Los archivos de Excel son binarios y requieren bibliotecas especiales que conozcan el formato de archivo, razón por la cual necesita una biblioteca adicional para Python, o un programa especial como Microsoft Excel, Gnumeric o LibreOffice, para leerlos / escribirlos.
import xlwt
style = xlwt.XFStyle()
style.num_format_str = ''0.00E+00''
...
for i,n in enumerate(list1):
sheet1.write(i, 0, n, fmt)