Python 每当列中出现逗号时创建新行
我正在尝试创建一个迷你程序,计算离我最近的开放式餐厅。我有一个数据集,其中包括餐厅名称、位置、星级和营业时间。然而,有一个问题:有时一家餐厅一天会有多个开放/关闭时间 例如:Python 每当列中出现逗号时创建新行,python,pandas,numpy,Python,Pandas,Numpy,我正在尝试创建一个迷你程序,计算离我最近的开放式餐厅。我有一个数据集,其中包括餐厅名称、位置、星级和营业时间。然而,有一个问题:有时一家餐厅一天会有多个开放/关闭时间 例如: Name, location, type, and hours Blue Duck Tavern, 1201 24th St NW, American Restaurant, 6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM 我试图将数据输入CSV,但对于有多个小时的餐厅(如示例中所示),它
Name, location, type, and hours
Blue Duck Tavern, 1201 24th St NW, American Restaurant, 6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM
我试图将数据输入CSV,但对于有多个小时的餐厅(如示例中所示),它无法正确解析数据
最简单的解决方案是(我认为)用同样的信息创建另一行,但下一个小时。因此,示例将如下所示:
Blue Duck Tavern, 1201 24th St NW, American Restaurant, 6:30-10:30AM
Blue Duck Tavern, 1201 24th St NW, American Restaurant, 11:30AM-2PM
Blue Duck Tavern, 1201 24th St NW, American Restaurant, 5:30-10:30PM
所以如果餐厅不开门,节目就不会播放
所以我有三个一般性问题。
1) 有没有比我上面提到的解决方案更好的方法(为多个开放/关闭小时的每次迭代创建一个新行)
2) 下面,我在以下实现中遇到问题:
import pandas as pd
import numpy as np
data = pd.import_csv(data.csv)
for row in data:
if data['hours'].str.contains(',') == 'True':
count = data['hours'].str.count(',')
data.append..
<create new row with Name[row], location[row], type[row], and hours[row] for the # of count>
这将导致:ValueError:没有为对象类型命名轴
我有点不清楚接下来的步骤,或者我做错了什么,因为如果我这么做:
print data[data['Monday'].astype(str).str.contains(',')]
它工作并返回结果。但是我不能做任何有条件的事情,除非它抛出一个错误
3) 如果一行中有多个逗号,我也有点困惑该怎么办。。我有一个模糊的想法,但如果你有任何提示,我很想听听:)
谢谢你的阅读 如果我理解正确,可以使用正则表达式作为分隔符加载数据,确保逗号前面不是
AM
或PM
(使用a)。然后,在将所有不想修改的列设置为索引后,可以使用str.split
和stack
。例如:
data = pd.read_csv('data.csv', sep='(?<!AM|PM),')
# Get rid of spaces in your column names
data.columns = data.columns.str.strip(' ')
>>> data
Name location type hours
0 Blue Duck Tavern 1201 24th St NW American Restaurant 6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM
new_data = (data.set_index(['Name', 'location', 'type'])
.hours.str.split(',', expand=True)
.stack()
.reset_index(level=['Name', 'location', 'type']))
>>> new_data
Name location type 0
0 Blue Duck Tavern 1201 24th St NW American Restaurant 6:30-10:30AM
1 Blue Duck Tavern 1201 24th St NW American Restaurant 11:30AM-2PM
2 Blue Duck Tavern 1201 24th St NW American Restaurant 5:30-10:30PM
data=pd.read\u csv('data.csv',sep=')(?尝试将多个小时与下面提到的“\u”或任何其他分隔符组合,并将其作为一个整体
上午6:30-10:30\u上午11:30-下午2点\u下午5:30-10:30
Blue Duck Tavern,1201西北大街24号,美国餐厅,上午6:30-10:30AM\u 11:30AM-2PM\u 5:30-10:30PM数据已经存在于数据框中?或者json对象中?是的!它已经存在于称为数据的数据框中(来自csv)
data = pd.read_csv('data.csv', sep='(?<!AM|PM),')
# Get rid of spaces in your column names
data.columns = data.columns.str.strip(' ')
>>> data
Name location type hours
0 Blue Duck Tavern 1201 24th St NW American Restaurant 6:30-10:30AM, 11:30AM-2PM,5:30-10:30PM
new_data = (data.set_index(['Name', 'location', 'type'])
.hours.str.split(',', expand=True)
.stack()
.reset_index(level=['Name', 'location', 'type']))
>>> new_data
Name location type 0
0 Blue Duck Tavern 1201 24th St NW American Restaurant 6:30-10:30AM
1 Blue Duck Tavern 1201 24th St NW American Restaurant 11:30AM-2PM
2 Blue Duck Tavern 1201 24th St NW American Restaurant 5:30-10:30PM