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
XFStyle
e 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)