Deseamos compartirte la mejor información que encontramos on line. Esperamos que te sirva de ayuda y si deseas aportar algo que nos pueda ayudar a crecer hazlo con libertad.
Solución:
Descargo de responsabilidad: esta respuesta se agrega mucho después de la pregunta y agrega información nueva que no responde directamente a la pregunta.
Ahora hay una nueva biblioteca rápida Mimesis – Fake Data Generator.
- Ventaja: se dice que funciona más rápido que
faker
(vea a continuación mi prueba de datos similar a la en cuestión). - Desventaja: funciona solo desde la versión 3.6 de Python.
pip install mimesis
>>> from mimesis import Person
>>> from mimesis.enums import Gender
>>> person = Person('en')
>>> person.full_name(gender=Gender.FEMALE)
'Antonetta Garrison'
>>> personru = Person('ru')
>>> personru.full_name()
'Рената Черкасова'
Lo mismo con el faker anterior desarrollado:
pip install faker
>>> from faker import Faker
>>> fake_ru=Faker('ja_JP')
>>> fake_ru=Faker('ru_RU')
>>> fake_jp=Faker('ja_JP')
>>> print (fake_ru.name())
Субботина Елена Наумовна
>>> print (fake_jp.name())
大垣 花子
A continuación, mi tiempo reciente de Mimesis vs.Faker basado en el código proporcionado en la respuesta de forzer0eight:
from faker import Faker
import pandas as pd
import random
fake = Faker()
def create_rows_faker(num=1):
output = ["name":fake.name(),
"address":fake.address(),
"name":fake.name(),
"email":fake.email(),
#"bs":fake.bs(),
"city":fake.city(),
"state":fake.state(),
"date_time":fake.date_time(),
#"paragraph":fake.paragraph(),
#"Conrad":fake.catch_phrase(),
"randomdata":random.randint(1000,2000) for x in range(num)]
return output
%%time
df_faker = pd.DataFrame(create_rows_faker(5000))
Tiempos de CPU: usuario 3,51 s, sys: 2,86 ms, total: 3,51 s Tiempo de pared: 3,51 s
from mimesis import Person
from mimesis import Address
from mimesis.enums import Gender
from mimesis import Datetime
person = Person('en')
import pandas as pd
import random
person = Person()
addess = Address()
datetime = Datetime()
def create_rows_mimesis(num=1):
output = ["name":person.full_name(gender=Gender.FEMALE),
"address":addess.address(),
"name":person.name(),
"email":person.email(),
#"bs":person.bs(),
"city":addess.city(),
"state":addess.state(),
"date_time":datetime.datetime(),
#"paragraph":person.paragraph(),
#"Conrad":person.catch_phrase(),
"randomdata":random.randint(1000,2000) for x in range(num)]
return output
%%time
df_mimesis = pd.DataFrame(create_rows_mimesis(5000))
Tiempos de CPU: usuario 178 ms, sys: 1,7 ms, total: 180 ms Tiempo de pared: 179 ms
A continuación se muestran los datos resultantes para la comparación:
df_faker.head(2)
address city date_time email name randomdata state
0 3818 Goodwin HavennBrocktown, GA 06168 Valdezport 2004-10-18 20:35:52 [email protected] Deborah Garcia 1218 Oklahoma
1 2568 Gonzales FieldnRichardhaven, NC 79149 West Rachel 1985-02-03 00:33:00 [email protected] Barbara Pineda 1536 Tennessee
df_mimesis.head(2)
address city date_time email name randomdata state
0 351 Nobles Viaduct Cedar Falls 2013-08-22 08:20:25.288883 [email protected] Ernest 1673 Georgia
1 517 Williams Hill Malden 2008-01-26 18:12:01.654995 [email protected] Jonathan 1845 North Dakota
Los siguientes scripts pueden mejorar notablemente el rendimiento de los pandas.
from faker import Faker
import pandas as pd
import random
fake = Faker()
def create_rows(num=1):
output = ["name":fake.name(),
"address":fake.address(),
"name":fake.name(),
"email":fake.email(),
"bs":fake.bs(),
"address":fake.address(),
"city":fake.city(),
"state":fake.state(),
"date_time":fake.date_time(),
"paragraph":fake.paragraph(),
"Conrad":fake.catch_phrase(),
"randomdata":random.randint(1000,2000) for x in range(num)]
return output
Tarda 5,55 segundos.
%%time
df = pd.DataFrame(create_rows(5000))
Wall time: 5.55 s
Puse las cosas falsas array dentro de mi bucle for para lograr el resultado deseado:
for i in range(10):
stuff = [fake.name()
, fake.email()
, fake.bs()
, fake.address()
, fake.city()
, fake.state()
, fake.date_time()
, fake.paragraph()
, fake.catch_phrase()
, random.randint(1000, 2000)]
df.loc[i] = [item for item in stuff]
print(df)
Si para ti ha resultado útil este artículo, agradeceríamos que lo compartas con más desarrolladores y nos ayudes a extender esta información.